js实现多线程
JavaScript 多线程的实现方法
JavaScript 本身是单线程的,但可以通过 Web Workers、SharedArrayBuffer 等技术实现类似多线程的效果。以下是常见的实现方式:
Web Workers
Web Workers 允许在后台线程中运行脚本,与主线程并行执行。主线程和 Worker 线程通过消息传递通信。
创建 Worker 线程
// 主线程
const worker = new Worker('worker.js');
worker.postMessage('Hello Worker');
worker.onmessage = function(e) {
console.log('Message from Worker:', e.data);
};
worker.js
self.onmessage = function(e) {
console.log('Message from Main:', e.data);
self.postMessage('Hello Main');
};
SharedArrayBuffer
SharedArrayBuffer 允许多个 Worker 共享同一块内存,实现真正的数据共享。

使用示例
// 主线程
const sharedBuffer = new SharedArrayBuffer(1024);
const worker1 = new Worker('worker1.js');
const worker2 = new Worker('worker2.js');
worker1.postMessage({ buffer: sharedBuffer });
worker2.postMessage({ buffer: sharedBuffer });
worker1.js
self.onmessage = function(e) {
const sharedArray = new Uint8Array(e.data.buffer);
Atomics.add(sharedArray, 0, 1); // 原子操作
};
Service Workers
Service Workers 是特殊的 Web Worker,主要用于拦截和处理网络请求,实现离线缓存等功能。

注册 Service Worker
if ('serviceWorker' in navigator) {
navigator.serviceWorker.register('/sw.js')
.then(registration => {
console.log('ServiceWorker registration successful');
});
}
注意事项
Web Workers 无法直接操作 DOM,需要通过 postMessage 与主线程通信。
SharedArrayBuffer 存在安全限制,需要服务器设置特定的 HTTP 头部才能使用。
Service Workers 只能在 HTTPS 或 localhost 环境下工作。






