js 实现线程
在 JavaScript 中,由于语言本身的单线程特性,无法直接创建传统意义上的线程(如 Java 或 C++ 中的多线程)。但可以通过以下方式模拟多线程行为或实现并行处理:
Web Worker
Web Worker 是浏览器提供的 API,允许在后台运行脚本,独立于主线程。适用于 CPU 密集型任务。
// 主线程代码
const worker = new Worker('worker.js');
worker.postMessage({ data: '任务数据' });
worker.onmessage = (event) => {
console.log('收到 Worker 结果:', event.data);
};
// worker.js
self.onmessage = (event) => {
const result = heavyComputation(event.data); // 耗时计算
self.postMessage(result);
};
Service Worker
主要用于离线缓存和网络请求拦截,运行在独立线程,但生命周期由浏览器控制。
// 注册 Service Worker
navigator.serviceWorker.register('sw.js').then(registration => {
console.log('注册成功');
});
异步编程
通过 Promise、async/await 实现非阻塞操作,模拟并发效果。
async function fetchData() {
const [data1, data2] = await Promise.all([
fetch('/api/data1'),
fetch('/api/data2')
]);
console.log(data1, data2);
}
SharedArrayBuffer + Atomics
通过共享内存实现多线程数据共享(需注意线程安全问题)。

// 主线程
const sharedBuffer = new SharedArrayBuffer(1024);
worker.postMessage({ buffer: sharedBuffer });
// Worker 线程
self.onmessage = (event) => {
const sharedArray = new Int32Array(event.data.buffer);
Atomics.add(sharedArray, 0, 1); // 原子操作
};
注意事项
- Web Worker 无法直接操作 DOM
- 线程间通信需通过
postMessage序列化数据 - Service Worker 需 HTTPS 环境(本地开发除外)






