NodeJs为异步单线程模型,其中如果主线程如果执行比较耗CPU的操作,可能会失去响应,因此工作线程(Worker)对于执行 CPU 密集型 JavaScript 操作非常有用。
worker_threads模块允许使用并行执行 JavaScript 的线程。模块包含跟worker线程通信的接口。
我们创建2个js文件,分别是main.js和worker.js
main.js代码如下,main.js向worker传入一个数组,让worker进行排序后返回
const { Worker } = require('worker_threads');
let data = ["Banana", "Orange", "Apple", "Mango"]
// 创建一个worker,执行文件为worker.js,传入数据
const worker = new Worker('./worker.js',{
workerData: data,
});
worker.on('message', (message)=>{
console.info(`收到worker发来的消息:${message}`)
});
worker.on('error', (error)=>{
console.info(`worker错误 ${error}`);
});
worker.on('exit', (code) => {
console.info(`worker退出了,退出码 ${code}`);
});
worker.js内容如下
const { isMainThread,parentPort, workerData } = require('worker_threads');
if (!isMainThread) {//在worker线程
//获取host传来的参数
const data = workerData;
//进行一些高CPU的操作
//如:排序
data.sort()
//返回数据
parentPort.postMessage(data);
}
执行
node main.js
输出
收到worker发来的消息:Apple,Banana,Mango,Orange
worker退出了,退出码 0
worker更详细API文档参考: