js实现并发
实现并发的方法
JavaScript 是单线程语言,但可以通过以下方式模拟并发或实现并行执行:
Web Workers
Web Workers 允许在后台线程中运行脚本,避免阻塞主线程。适用于 CPU 密集型任务。

// 主线程
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
通过事件循环模拟并发,适合简单的定时任务。

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 或集群。






