当前位置:首页 > JavaScript

js实现并发

2026-01-31 20:51:34JavaScript

实现并发的方法

JavaScript 是单线程语言,但可以通过以下方式模拟并发或实现并行执行:

Web Workers

Web Workers 允许在后台线程中运行脚本,避免阻塞主线程。适用于 CPU 密集型任务。

js实现并发

// 主线程
const worker = new Worker('worker.js');
worker.postMessage({ data: 'some data' });
worker.onmessage = (e) => {
  console.log('Message from worker:', e.data);
};

// worker.js
self.onmessage = (e) => {
  const result = processData(e.data);
  self.postMessage(result);
};

Promise 和 async/await

利用异步编程模型处理并发任务,适用于 I/O 密集型操作。

async function fetchConcurrently(urls) {
  const promises = urls.map(url => fetch(url));
  const responses = await Promise.all(promises);
  return Promise.all(responses.map(res => res.json()));
}

setTimeout/setInterval

通过事件循环模拟并发,适合简单的定时任务。

js实现并发

function task1() {
  console.log('Task 1');
  setTimeout(task1, 1000);
}

function task2() {
  console.log('Task 2');
  setTimeout(task2, 1500);
}

task1();
task2();

SharedArrayBuffer 和 Atomics

用于真正的内存共享并发,但需要谨慎使用以避免竞态条件。

const sharedBuffer = new SharedArrayBuffer(16);
const sharedArray = new Int32Array(sharedBuffer);

// 线程1
Atomics.store(sharedArray, 0, 123);

// 线程2
const value = Atomics.load(sharedArray, 0);

Cluster 模块 (Node.js)

在 Node.js 中利用多核 CPU 实现真正的并行处理。

const cluster = require('cluster');
const os = require('os');

if (cluster.isMaster) {
  const cpus = os.cpus().length;
  for (let i = 0; i < cpus; i++) {
    cluster.fork();
  }
} else {
  // Worker代码
  require('./server');
}

注意事项

  • Web Workers 无法直接访问 DOM
  • 共享内存操作需要同步机制
  • 异步代码要注意错误处理
  • Node.js 集群需要处理进程间通信

选择合适的方法取决于具体应用场景和性能需求。I/O 密集型任务适合异步模式,CPU 密集型任务应考虑 Web Workers 或集群。

标签: js
分享给朋友:

相关文章

jquery.js

jquery.js

jQuery 简介 jQuery 是一个快速、简洁的 JavaScript 库,用于简化 HTML 文档遍历、事件处理、动画设计和 Ajax 交互。它的设计宗旨是“Write Less, Do Mor…

js实现验证码

js实现验证码

使用Canvas生成图形验证码 在HTML中创建一个Canvas元素用于绘制验证码。通过JavaScript随机生成数字或字母组合,并添加干扰线、噪点等干扰元素增强安全性。 <canvas i…

js树实现

js树实现

树的基本概念 树是一种非线性的数据结构,由节点和边组成。每个节点包含一个值和指向子节点的引用。树的顶部节点称为根节点,没有子节点的节点称为叶节点。 树的实现方式 在JavaScript中,树可以通过…

js实现目录

js实现目录

实现目录的基本思路 在JavaScript中实现目录功能通常涉及以下几个核心步骤:解析文档中的标题元素(如h1-h6),动态生成目录结构,并添加交互逻辑(如点击跳转)。以下是具体实现方法: 解析标题…

js节流实现

js节流实现

节流的概念 节流(Throttle)是一种限制函数执行频率的技术,确保函数在一定时间间隔内只执行一次。常用于滚动事件、窗口调整等高频触发的场景。 基础实现方法 使用时间戳判断是否执行函数:…

js实现正交

js实现正交

正交的概念 正交在数学和计算机科学中通常指两个向量垂直或线性无关。在编程中,正交性常被用于设计模块化、低耦合的系统。 向量正交判断 判断两个向量是否正交可以通过点积是否为0来实现: functio…