js 实现线程
在JavaScript中实现类似线程的功能可以通过以下几种方法实现,尽管JavaScript本身是单线程的,但通过异步编程或Web Worker可以实现并行处理的效果。
使用Web Worker
Web Worker是HTML5提供的API,允许在后台线程中运行脚本,不会阻塞主线程。适合处理密集型计算任务。
创建worker脚本文件(例如worker.js):

self.onmessage = function(e) {
const result = e.data * 2;
postMessage(result);
};
在主线程中调用:
const worker = new Worker('worker.js');
worker.postMessage(10);
worker.onmessage = function(e) {
console.log(e.data); // 输出20
};
使用异步编程(Promise/async-await)
通过异步操作模拟非阻塞行为,适用于I/O密集型任务。

async function fetchData() {
const response = await fetch('https://api.example.com/data');
const data = await response.json();
return data;
}
fetchData().then(data => console.log(data));
使用setTimeout/setInterval
通过事件循环机制模拟异步行为,但实际仍在主线程执行。
setTimeout(() => {
console.log('延迟执行');
}, 1000);
使用SharedArrayBuffer和Atomics(高级场景)
适用于需要共享内存的多线程操作,但需谨慎处理同步问题。
const sharedBuffer = new SharedArrayBuffer(16);
const sharedArray = new Int32Array(sharedBuffer);
// Worker中可通过Atomics操作共享内存
注意事项
- Web Worker无法直接操作DOM,需通过
postMessage通信。 - 大量微任务(如Promise)仍可能阻塞主线程。
- 线程间共享数据需注意竞态条件问题。
选择方法需根据具体场景:CPU密集型任务推荐Web Worker,I/O密集型可用异步编程,定时任务可用setTimeout/setInterval。






