gpt4 book ai didi

javascript - 在收到来自单个 worker 的消息后向所有 worker 发送消息

转载 作者:行者123 更新时间:2023-11-29 15:55:16 25 4
gpt4 key购买 nike

我试图让我的主人在 worker 之间分配工作,它唯一做的就是在收到其中一名 worker 的消息后向所有 worker 发送消息。

我已经尝试将 worker.send 包含在 worker.on 函数中,如下所示。出于某种原因,它将打印每个 worker 自己的 id 'text to' 后跟相同的 id,但不会打印任何其他组合。 (例如“0 文本到 3”)

const cluster = require('cluster')
const numCPUs = require('os').cpus().length

if (cluster.isMaster) {
for (let i = 0; i < numCPUs; i++) {
const worker = cluster.fork({id: i})
worker.on('message', text => {
worker.send(text)
})
}
}
else {
const id = Number(process.env.id)
let messagesReceived = 0
process.send(id)
process.on('message', text => {
console.log(text, 'text to', id)
messagesReceived++
})
if (messagesReceived >= numCPUs) process.exit()
}

基本上在示例中,我希望每个 worker 能够将自己的 ID 发送给主人,并让主人将消息发送给所有 worker 。每个工作人员都应该打印数字“文本到”数字的每个组合。数字上升到有多少 worker 。

最佳答案

您的主进程仅在将其初始消息发送给主进程后才将消息发送回工作进程。如果您想要向所有工作人员广播一条消息,那么您需要维护一个工作人员数组并循环发送给他们。

const cluster = require('cluster')
const numCPUs = require('os').cpus().length

if (cluster.isMaster) {
masterLogic();
} else {
workerLogic();
}

async function masterLogic() {
const workers = await Promise.all(
[...Array(numCPUs).keys()].map(i => spawnWorker(i));
);

for (let i = 0; i < numCPUs; i++) {
workers.forEach(worker => worker.send(`Message #${i}`));
}
}

function spawnWorker(i) {
return new Promise(resolve => {
const worker = cluster.fork({ id: i })
worker.on('message', text => {
resolve(worker);
});
});
}

function workerLogic() {
const id = Number(process.env.id)
let messagesReceived = 0
process.send(id)
process.on('message', text => {
console.log(text, 'text to', id)
messagesReceived++
})
if (messagesReceived >= numCPUs) process.exit()
}

关于javascript - 在收到来自单个 worker 的消息后向所有 worker 发送消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58633501/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com