node的多线程worker_threads

117 阅读1分钟

主进程文件

const { Worker } = require("worker_threads");

const worker = new Worker("./te05.js");

worker.setMaxListeners(Infinity); //对主进程设置最大监听数量,Infinity或者0表示不设置监听数量,监听超过10个一般会发出警告

worker.on("message"(message) => {

  //监听子进程传递过来的消息。默认message事件名称不可更改,对应parentPort.postMessage("呵呵呵我把我传给主进程");

  console.log(message, "其它线程传来消息");

  worker.terminate(); // 关闭此worker线程

});
worker.postMessage("我是主进程的东东,我把我传给子进程");

// 打印结果

// 我是主进程的东东,我把我传给子进程 我的子线程

// 呵呵呵我把我传给主进程 其它线程传来消息

// -先执行的是子进程的东西。感觉worker.on被挂起,执行完worker.postMessage进了子进程去执行parentPort.on

// 然后才是发送子进程到主进程parentPort.postMessage,在回来执行主进程的worker.on

子进程文件

const { parentPort } = require("worker_threads");

// 子进程引出的是parentPort

// parentPort.on--监听主进程发送过来的消息,注意消息事件必须是message不可以更改,对应

// 主进程中的worker.postMessage("我是主进程的东东,我把我传给子进程");

parentPort.on("message"(message) => {

  // message作为参数,则是主进程发送过来的消息"我是主进程的东东,我把我传给子进程"

  console.log(message, "我的子线程");

  // 下面是子进程向主进程发送消息,

  parentPort.postMessage("呵呵呵我把我传给主进程");

});