有没有一个选项可以让主线程等待所有工作线程完成?
在下面的代码中,mainThread.js 只是简单地创建了 worker。
工人需要很长时间才能执行。
在这种情况下,我们如何指示主线程等待所有线程执行完毕?
类似于 java 中的 thread.join() 的东西。
主线程.js:
const {Worker, parentPort, workerData} = require('worker_threads');
const path = require('path');
const startWorker = function(path, workerData, callback) {
//Create worker thread
let worker = new Worker(path, {workerData});
//Listen to events of the worker thread
worker.on('message', (msg) => {
callback(null, msg);
});
worker.on('error', callback);
worker.on('exit', (code) => {
if(code !== 0) {
console.error(`Error: Non-zero exit code ${code}`)
}
});
//Return the worker thread
return worker;
};
console.log('This is Main Thread');
//Create and start worker threads
let thread1 = startWorker(__dirname + path.sep + 'workerThread.js', "user1", (error, result) => {
if(error) return console.error(error);
console.log('Result: ', result);
});
let thread2 = startWorker(__dirname + path.sep + 'workerThread.js', "user2", (error, result) => {
if(error) return console.error(error);
console.log('Result: ', result);
});
workerThread.js:
const {workerData, parentPort} = require('worker_threads');
setTimeout(() => {
console.log(workerData);
parentPort.postMessage(workerData + "done");
}, 2000)
执行:
node --experimental-worker mainThread.js
PS:我们可以尝试通过将其作为 http 服务器实例运行或设置一个具有巨大值的 setTimeout 来使其工作。但是,nodejs 本身是否有一个选项来实现它是个问题。