Node.js因为JS的执行在单一线程,致使CPU密集计算的任务可能会使主线程会处于繁忙的状态,进而影响服务的性能,虽然能够经过child_process模块建立子进程的方式来解决,可是一方面进程之间没法共享内存,另外一方面建立进程的开销也不小。因此在10.5.0版本中Node.js提供了worker_threads模块来支持多线程,一直以来被人所诟病的不擅长CPU密集计算有望成为历史。
源码 --> https://github.com/nodejs/nod...
worker_thread 模块中有 4 个对象和 2 个类。node
const assert = require('assert'); const { Worker, MessageChannel, MessagePort, isMainThread, parentPort } = require('worker_threads'); if (isMainThread) { const worker = new Worker(__filename); const subChannel = new MessageChannel(); worker.postMessage({ hereIsYourPort: subChannel.port1 }, [subChannel.port1]); subChannel.port2.on('message', (value) => { console.log('received:', value); }); } else { parentPort.once('message', (value) => { assert(value.hereIsYourPort instanceof MessagePort); value.hereIsYourPort.postMessage('the worker is sending this'); value.hereIsYourPort.close(); }); }