multithreading - 功能完成后杀死 node.js 工作人员

标签 multithreading node.js multiprocessing

我是一个完全的 node.js 新手,刚刚开始修补它。我有一段代码执行一个处理所有 cpu 内核上的字符串的函数,我希望通过它的 id 确定哪个工作人员首先完成该功能,然后杀死每个工作人员(或只是退出 Node )。

这是我的程序的简化代码:

var cluster = require('cluster'),
    cpus = require("os").cpus().length, // 4 cores
    myArray = ["foo","bar","baz","qux"]; // 1 string per core

if (cluster.isMaster) {
    for (var i = 0; i < cpus; i++) {
        var worker = cluster.fork();
    }
    cluster.on('exit', function(worker, code, signal) {
        console.log('worker ' + worker.process.pid + ' died');
    });
} else if (cluster.isWorker) {
    computeString(myArray[cluster.worker.id]);
}

function computeString() {
    // Code to compute...
}

此代码有效,并且 computeString() 函数完成速度比在外部执行快得多

else if (cluster.isWorker) {}

所以问题是,在一个工作人员/进程完成该功能后, Node 会一直等待,直到每个进程都完成了它们的工作,并且在这些进程之后也不会终止,每个进程都保持空闲状态,直到我按下 ctrl+c。

我的方法是:

function computeString() {
    // Code to compute...
    if (done) {
         console.log("Worker #" + cluster.worker + " completed the task!");
         for (var id in cluster.workers) {
            cluster.workers[id].kill();
         }
     }
}

但既然我在这里问,显然是行不通的:)

最佳答案

所以你想在第一个 worker 完成工作后杀死所有 worker?

...
cluster.on('exit', function(worker, code, signal) {
  console.log('worker ' + worker.process.pid + ' died');
  // kill the other workers.
  for (var id in cluster.workers) {
    cluster.workers[id].kill();
  }
  // exit the master process
  process.exit(0);
});
...
function computeString() {
  // Code to compute...
  if (done) {
    process.exit(0); // exit the worker process cleanly, triggering the 'exit' event
  }
};

关于multithreading - 功能完成后杀死 node.js 工作人员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15548943/

相关文章:

java - ThreadWeaver 总是抛出 IllegalArgumentException

c# - 锁定问题 - 多线程使 LOOP 乱序

javascript - 使用 Mocha、Chai 和 Sinon 在 Promise 完成后测试非 Promise

Go 计算虚拟内核,而不是物理内核?

python - 对面向队列的函数使用多处理后没有性能提升

objective-c - dispatch_async 慢于 PerformSelectorInBackground :?

java - 如何等待线程完成其工作

javascript - 无法使用 Bootstrap 和 Node 获取 POST 数据

node.js - Mixin 声明没有主体

python - 使用 mpi 而不是多处理模块时,python 中的并行应用程序变得更慢