js实现并发
JavaScript 实现并发的方法
JavaScript 是单线程语言,但可以通过异步编程和 Web Workers 实现并发效果。
异步编程实现并发
使用 Promise.all 可以并行执行多个异步操作:
const promise1 = fetch('https://api.example.com/data1');
const promise2 = fetch('https://api.example.com/data2');
Promise.all([promise1, promise2])
.then(([response1, response2]) => {
// 处理两个请求的结果
})
.catch(error => {
// 处理错误
});
Web Workers 实现真正并发
Web Workers 允许在后台线程运行脚本:
// 主线程
const worker = new Worker('worker.js');
worker.postMessage('start');
worker.onmessage = (event) => {
console.log('Received:', event.data);
};
// worker.js
self.onmessage = (event) => {
const result = doHeavyCalculation(event.data);
self.postMessage(result);
};
使用 async/await 控制并发
限制并发数量的实现方式:

async function concurrentRequests(urls, maxConcurrent) {
const results = [];
const executing = new Set();
for (const url of urls) {
const promise = fetch(url);
executing.add(promise);
promise.then(() => executing.delete(promise));
results.push(await promise);
if (executing.size >= maxConcurrent) {
await Promise.race(executing);
}
}
return Promise.all(results);
}
注意事项
- 浏览器环境有最多 6 个 HTTP 请求的并发限制
- Node.js 可以使用
worker_threads模块实现多线程 - 共享内存需要使用
SharedArrayBuffer但要小心竞态条件






