gpt4 book ai didi

javascript - Nodejs - 锁、 key 和 worker - 同步代码和在 javascript 世界中等待

转载 作者:行者123 更新时间:2023-11-28 01:12:27 26 4
gpt4 key购买 nike

经典问题,这次是在nodejs环境下遇到的,想了一会儿,不知道解决这个问题的最佳方法是什么。

我有:

  • 4 种资源 - 让我们称这些为“键”。
  • X 任务 - 让我们称这些为“锁”。
  • Y 名 worker - 实际上在 1 到 4 名之间。

1 个任务和 1 个资源(无论是哪一个)的组合是由 worker 完成的工作:或者换句话说 - worker 用 key 打开锁:)

我想利用我的资源和 worker 尽快打开这些锁。
每个 worker 都应该尝试捕获一把 key ,捕获一把锁,打开锁,然后把 key 放回去。
当没有 key 可用时,工作人员需要等待,直到有 key 为止。
当所有锁都打开时, worker 们就可以回家享受啤酒了。

如何在 javascript/nodejs 环境中解决这个问题?
请随意使用 redis/mongo/任何您需要的工具来实现这一点。

请帮我安排我的 worker 今天早点回家! :)

最佳答案

可以使用RabbitMQ来解决这个问题。您可以为每个工作人员维护 4 个不同的队列。每个工作人员都将绑定(bind)到一个单独的队列。

So the worker will be waiting till there is no message on the queue. As soon as there is a message in your case a key the worker will start processing complete the task and again wait for the next key.

将有单个发布者和多个监听器,即单个主管和多个工作人员。如果需要,您甚至可以实现批处理。

例如:

  connection.on('ready', function () {
connection.queue("queue_name", function(queue){
connection.exchange('exchange_name', {type: 'topic', confirm: true},function(exchange){
queue.bind('exchange_name');
queue.subscribe({ack: true},function (message, headers, deliveryInfo) {
try{
var data = unescape(message.data);
processMessage(data); // whatever needs to be done with the received message
queue.shift();
}
catch(e){
console.log('Some error occured.'+ e);
}
})
})
})
})

关于javascript - Nodejs - 锁、 key 和 worker - 同步代码和在 javascript 世界中等待,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24253419/

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