js 实现线程
JavaScript 是单线程语言,但可以通过以下方式模拟多线程或实现并发操作:
Web Workers
Web Workers 允许在后台运行脚本,独立于主线程执行任务,避免阻塞 UI。
// 主线程代码
const worker = new Worker('worker.js');
worker.postMessage({ data: 'start' });
worker.onmessage = (e) => {
console.log('Received from worker:', e.data);
};
// worker.js
self.onmessage = (e) => {
console.log('Worker received:', e.data);
self.postMessage({ result: 'Processed data' });
};
异步编程
利用 Promise、async/await 实现非阻塞操作:
async function fetchData() {
const response = await fetch('https://api.example.com/data');
const data = await response.json();
console.log(data);
}
fetchData();
setTimeout/setInterval
通过事件循环模拟并发:
setTimeout(() => {
console.log('Delayed execution');
}, 1000);
setInterval(() => {
console.log('Repeating task');
}, 2000);
SharedArrayBuffer 和 Atomics
用于线程间共享内存(需注意线程安全):

const sharedBuffer = new SharedArrayBuffer(1024);
const sharedArray = new Int32Array(sharedBuffer);
// 线程1
Atomics.store(sharedArray, 0, 123);
// 线程2
const value = Atomics.load(sharedArray, 0);
注意事项
- Web Workers 无法直接访问 DOM
- 跨线程通信需通过 postMessage
- 共享内存操作需使用原子操作保证安全
- 大量计算任务建议使用 Worker 避免主线程卡顿






