NodeJS工作线程worker_threads使用

发布时间:2024年01月21日

NodeJs为异步单线程模型,其中如果主线程如果执行比较耗CPU的操作,可能会失去响应,因此工作线程(Worker)对于执行 CPU 密集型 JavaScript 操作非常有用。

worker_threads模块允许使用并行执行 JavaScript 的线程。模块包含跟worker线程通信的接口。

NodeJs 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文档参考:

https://readdevdocs.com/nodejs/v18/worker_threads.html

文章来源:https://blog.csdn.net/wrangler_csdn/article/details/135678905
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。