js怎么实现并行
并行实现方法
在JavaScript中实现并行操作可以通过多种方式,以下是一些常见的方法:
Web Workers
Web Workers允许在后台线程中运行脚本,避免阻塞主线程。创建一个Worker实例并传递消息即可实现并行计算。
// 主线程代码
const worker = new Worker('worker.js');
worker.postMessage({ data: 'some data' });
worker.onmessage = (event) => {
console.log('Received from worker:', event.data);
};
// worker.js
self.onmessage = (event) => {
const result = processData(event.data);
self.postMessage(result);
};
Promise.all
Promise.all可以并行执行多个Promise,等待所有Promise完成后再处理结果。
const promise1 = fetch('url1');
const promise2 = fetch('url2');
const promise3 = fetch('url3');
Promise.all([promise1, promise2, promise3])
.then((responses) => {
console.log('All responses:', responses);
})
.catch((error) => {
console.error('Error:', error);
});
Async/Await
结合Promise.all和async/await语法,可以更简洁地实现并行操作。
async function fetchAllData() {
const [data1, data2] = await Promise.all([
fetch('url1').then(res => res.json()),
fetch('url2').then(res => res.json())
]);
console.log(data1, data2);
}
Child Processes (Node.js)
在Node.js环境中,可以使用child_process模块创建子进程实现并行计算。
const { fork } = require('child_process');
const child = fork('child.js');
child.send({ data: 'some data' });
child.on('message', (result) => {
console.log('Result from child:', result);
});
// child.js
process.on('message', (data) => {
const result = processData(data);
process.send(result);
});
Cluster模块 (Node.js)
cluster模块允许创建多个工作进程共享同一个服务器端口,适合处理高并发请求。
const cluster = require('cluster');
const http = require('http');
if (cluster.isMaster) {
for (let i = 0; i < 4; i++) {
cluster.fork();
}
} else {
http.createServer((req, res) => {
res.end('Hello from worker');
}).listen(8000);
}
注意事项
- Web Workers和Child Processes适用于CPU密集型任务,避免阻塞主线程。
- Promise.all适合IO密集型任务,如并行网络请求。
- 并行操作可能增加内存和CPU消耗,需根据实际场景权衡。







