js 实现多线程
在 JavaScript 中实现多线程通常通过 Web Workers 技术实现,它允许在主线程之外运行脚本,避免阻塞 UI 渲染。以下是具体实现方法和注意事项:
Web Workers 基础用法
创建一个新的 Worker 实例,传入脚本文件路径:
const worker = new Worker('worker.js');
主线程与 Worker 通过 postMessage 通信:
worker.postMessage({ data: '发送给Worker的数据' });
Worker 脚本(worker.js)接收和处理消息:
self.onmessage = function(e) {
const result = e.data.toUpperCase(); // 示例处理
self.postMessage(result);
};
共享内存与性能优化
使用 SharedArrayBuffer 实现线程间共享内存:
const sharedBuffer = new SharedArrayBuffer(1024);
worker.postMessage({ buffer: sharedBuffer });
Atomics 操作确保原子性:
Atomics.add(sharedArray, index, value);
终止 Worker
避免内存泄漏,任务完成后及时终止:
worker.terminate();
替代方案
对于轻量级任务,可使用 setTimeout 或 requestIdleCallback 分块执行:
function chunkedTask() {
// 分块处理逻辑
if (moreWork) {
setTimeout(chunkedTask, 0);
}
}
注意事项
- Worker 无法直接访问 DOM
- 传递数据会被结构化克隆,大对象可能影响性能
- 部分 API(如 WebSocket)在 Worker 中行为可能不同
这种实现方式适用于 CPU 密集型任务,如图像处理、大数据计算等场景。







