js怎么实现并行
并行实现方法
JavaScript 是单线程语言,但可以通过多种方式模拟并行执行或利用多线程能力。
Web Workers
Web Workers 允许在后台线程中运行脚本,与主线程并行执行。创建一个新的 Worker 实例并传递脚本文件路径:
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 = e.data.data.toUpperCase();
self.postMessage(result);
};
Promise.all
对于异步操作的并行执行,使用 Promise.all 等待多个 Promise 同时完成:

const promise1 = fetch('https://api.example.com/data1');
const promise2 = fetch('https://api.example.com/data2');
Promise.all([promise1, promise2])
.then(([response1, response2]) => {
console.log(response1, response2);
});
Async/Await 结合 Promise.all
使用 async/await 语法糖使代码更清晰:
async function fetchParallel() {
const [res1, res2] = await Promise.all([
fetch('https://api.example.com/data1'),
fetch('https://api.example.com/data2')
]);
const data1 = await res1.json();
const data2 = await res2.json();
console.log(data1, data2);
}
Cluster 模块 (Node.js)
在 Node.js 中,使用 cluster 模块创建子进程实现并行:
const cluster = require('cluster');
const os = require('os');
if (cluster.isMaster) {
const cpuCount = os.cpus().length;
for (let i = 0; i < cpuCount; i++) {
cluster.fork();
}
} else {
require('./server');
}
Child Process (Node.js)
通过 child_process 模块创建独立进程:

const { spawn } = require('child_process');
const ls = spawn('ls', ['-lh', '/usr']);
ls.stdout.on('data', (data) => {
console.log(`stdout: ${data}`);
});
SharedArrayBuffer 和 Atomics
在支持的环境中使用共享内存进行线程间通信:
const sharedBuffer = new SharedArrayBuffer(16);
const sharedArray = new Int32Array(sharedBuffer);
// 在 Worker 中可以使用 Atomics 操作共享内存
Atomics.store(sharedArray, 0, 123);
Service Workers
用于离线缓存和网络请求拦截,可实现后台并行处理:
navigator.serviceWorker.register('/sw.js')
.then(registration => {
console.log('ServiceWorker registered');
});
选择方法取决于具体场景:
- 浏览器环境优先考虑 Web Workers 和 Service Workers
- Node.js 环境适合使用 Cluster 和 Child Process
- 简单异步并行使用 Promise.all
- 需要共享内存时考虑 SharedArrayBuffer






