虽然 Node 主线程是单线程,但 worker_threads 可以在独立线程里运行另一段 JS。每个 Worker 拥有自己的 V8 实例与事件循环,主从线程之间通过 postMessage 双向收发消息。它解决的是 CPU 密集型计算阻塞主事件循环的问题——图片处理、压缩、加密这类任务丢进线程池后,主接口依然丝滑。
使用方式:主线程用 new Worker(文件路径) 起一个工作线程,通过 on 监听结果;工作线程内部用 parentPort 往外发消息。数据传递默认会被序列化,大块二进制数据可用 transferList 转移所有权避免拷贝。注意线程本身有不小的开销,不适合把任务拆成过多小线程。
const { Worker, isMainThread, parentPort } = require('worker_threads'); if (isMainThread) { // 主线程:把耗时计算丢给工作线程 const worker = new Worker(__filename); worker.on('message', (sum) => { console.log('计算结果: ' + sum); }); } else { // 工作线程:纯 CPU 计算,不阻塞主线程 let sum = 0; for (let i = 0; i < 1e9; i++) sum += i; parentPort.postMessage(sum); }