我是一个完全的 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/