5

有没有一个选项可以让主线程等待所有工作线程完成?
在下面的代码中,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 本身是否有一个选项来实现它是个问题。

4

0 回答 0