Nodejs -锁,键和工作者- javascript世界中的同步代码和等待
nodejs - locks, keys and workers - synchronous code and waiting in javascript world
经典问题,这次在nodejs环境中遇到,考虑了一段时间后,我不确定解决这个问题的最佳方法是什么。
i have:
- 4种资源——我们称它们为"钥匙"。
- X任务——我们称之为"锁"。
- Y工人-实际上在1到4之间。
1个任务和1个资源的组合(与哪个无关)是由worker完成的工作:或者换句话说- worker用钥匙打开锁:)
我想用我的资源和工人尽可能快地打开这些锁。每个工人都应该试着抓住一把钥匙,抓住一把锁,打开锁,然后把钥匙放回去。当没有可用的键时,worker需要等待,直到有一个。
当所有的锁都打开时,工人们就可以回家喝杯啤酒了。
如何在javascript/nodejs环境中解决这个问题?
请随意使用redis/mongo/任何你需要的工具来实现这一点。
今天请帮我早点让我的工人回家!:)
你可以使用RabbitMQ来解决这个问题。您可以为每个worker维护4个不同的队列。每个worker将被绑定到一个单独的队列。
所以工作线程将一直等待,直到队列中没有消息。只要有消息在您的情况下,一个关键的工人将启动处理完成任务并再次等待下一个键。
将有单个发布者和多个监听者,即单个主管和多个工作者。如果需要,您甚至可以实现批处理。
例如: 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);
}
})
})
})
})
相关文章:
- Node.js-等待process.exit()在前面的代码完成后执行
- Javascript等待ajax成功后再执行代码
- 等待promise解析后再执行代码
- 如何在进入代码的下一部分之前等待任务完成
- 如何使EXPECT条件等待promise被解析(代码封装在方法中)
- 等待函数 $.get 中的代码完成以继续
- 我怎样才能异步执行 JavaScript 代码片段并等待它们的结果
- 服务器是否可以强制浏览器等待而不更改网页代码
- 在等待节点回调时运行任意代码
- 让代码等待,直到 AJAX 请求完成
- 以下代码是否等待“每个”完成
- 等待几秒钟,让下载完成,然后执行PHP代码
- 如何使代码等待提交表单
- 等待第一个事件完成,然后继续使用document.ready代码
- JQuery在执行下一行代码之前等待几秒钟
- 如何在执行下一行代码之前等待主干事件触发器完成
- 代码执行是否等待Ajax响应
- Google Maps放置API——如何让代码等待响应
- 强迫部分代码等待其他代码
- Node.js让代码等待fs. js文件.readFile已完成