js可以实现并行吗
JavaScript 的并行能力
JavaScript 本身是单线程语言,但可以通过以下方式实现并行或类似并行的效果:
Web Workers
Web Workers 允许在后台线程中运行脚本,与主线程并行执行。适合计算密集型任务。
// 主线程
const worker = new Worker('worker.js');
worker.postMessage({ data: 'some data' });
// worker.js
self.onmessage = function(e) {
const result = e.data + ' processed';
self.postMessage(result);
};
Service Workers
主要用于离线缓存和网络请求拦截,运行在独立线程。
// 注册 Service Worker
navigator.serviceWorker.register('/sw.js').then(registration => {
console.log('ServiceWorker registration successful');
});
SharedArrayBuffer 和 Atomics
允许线程间共享内存,配合 Web Workers 实现真正的并行计算。
// 主线程
const sharedBuffer = new SharedArrayBuffer(1024);
const worker = new Worker('worker.js');
worker.postMessage({ buffer: sharedBuffer });
// worker.js
self.onmessage = function(e) {
const sharedArray = new Int32Array(e.data.buffer);
Atomics.add(sharedArray, 0, 1);
};
Cluster 模块 (Node.js)
在 Node.js 中,cluster 模块可以创建多个进程充分利用多核 CPU。
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);
}
Promise.all
虽然不是真正的并行,但可以并发执行异步操作。
const promise1 = fetch(url1);
const promise2 = fetch(url2);
const promise3 = fetch(url3);
Promise.all([promise1, promise2, promise3])
.then(values => console.log(values));
GPU.js
利用 GPU 加速计算,适合大规模并行计算任务。
const gpu = new GPU();
const multiplyMatrix = gpu.createKernel(function(a, b) {
let sum = 0;
for (let i = 0; i < 512; i++) {
sum += a[this.thread.y][i] * b[i][this.thread.x];
}
return sum;
}).setOutput([512, 512]);
这些方法各有适用场景,Web Workers 适合浏览器环境,cluster 适合 Node.js 服务端,GPU.js 适合数值计算。选择取决于具体需求。







