2

我有一些用于玩“工作线程”(Node js)的代码。当在循环中的 app.js 中设置条件 i<100000000 时,我的第二个线程在第一个线程未完成之前不会启动。Node js如何工作同步线程?以及如何并行使用两个或更多线程?

const { Worker } = require('worker_threads');
const path = require('path');

const WORKERS_NUMBER = 2;

for (var i = 1; i <= WORKERS_NUMBER ; i++) {
  const w = new Worker(path.join(__dirname, './app.js'), { workerData: { id: i } });
  w.addListener("message",(message)=>{console.log(message);});
}

const { workerData, parentPort } = require('worker_threads');

const id = workerData.id;

console.log(`Worker ${id} initializad.`);
let i=0;
while (i<10) {
  i++;
  process.nextTick((i)=>{    
    parentPort.postMessage( `${id}:${i}` );
  },i);
}

4

1 回答 1

0

您需要手动同步线程的执行。您可以通过监听从工作人员发送到主线程的特定消息并使用计数器来了解所有线程何时完成。

否则,您可以使用微作业库,它可以轻松地将工作线程执行包装在 Promise 中,因此同步变得微不足道。

查看文档中的示例。

于 2020-03-26T22:38:57.517 回答