2024-05-16 22:58:47 发布
网友
在我的解决方案中,我使用分布式任务监视硬件实例一段时间(比如10分钟)。我必须在以下情况下做些事情:
在整个会话(10分钟)中运行一个任务并执行所有这些任务是安全的,还是应该将这些操作拆分为各自的任务?在
在我看来,单一任务的优点是更容易管理和实施时间限制。但是:
管理一大群(大部分)睡着的工人是个好主意吗?例如,如果我知道最多我将有200个会议开放,我有一个500个工人池,以确保始终有可用的“会议”席位?在
对此没有一刀切的答案
所以如果你有一个工作实例,有10个工作线程/进程, 现在可以使用10个线程并行运行,而不是按顺序运行 一根线。在
部分的数量称为任务粒度(细粒度或粗粒度)。在
每个部分必须有足够的计算/IO来抵消发送任务的开销 将消息发送给代理,如果没有工作线程接收消息,则可能将其写入磁盘,依此类推(请注意,消息传递开销可以调整,例如,您可以拥有一个临时队列(而不是将消息持久化到磁盘),并发送不那么重要的任务)。在
如果您有一个繁忙的集群,那么可能已经达到了最大的并行性(例如,3个worker实例,每个实例有10个线程/进程,所有的任务都在运行)。在
然后,通过划分任务,您可能得不到太多好处,但是执行I/O操作的任务比CPU限制的任务(按I/O操作拆分)有更大的改进机会。在
工人对长时间运行的任务不过敏,不管是10分钟还是1小时。在
但这也不理想,因为任何长时间运行的任务都会阻止这个槽 完成所有等待的任务。为了减轻这种情况,人们使用路由,这样您就有了一个专用队列,并为必须尽快运行的任务配备了专用的工作人员。在
-
对此没有一刀切的答案
所以如果你有一个工作实例,有10个工作线程/进程, 现在可以使用10个线程并行运行,而不是按顺序运行 一根线。在
部分的数量称为任务粒度(细粒度或粗粒度)。在
每个部分必须有足够的计算/IO来抵消发送任务的开销 将消息发送给代理,如果没有工作线程接收消息,则可能将其写入磁盘,依此类推(请注意,消息传递开销可以调整,例如,您可以拥有一个临时队列(而不是将消息持久化到磁盘),并发送不那么重要的任务)。在
如果您有一个繁忙的集群,那么可能已经达到了最大的并行性(例如,3个worker实例,每个实例有10个线程/进程,所有的任务都在运行)。在
然后,通过划分任务,您可能得不到太多好处,但是执行I/O操作的任务比CPU限制的任务(按I/O操作拆分)有更大的改进机会。在
工人对长时间运行的任务不过敏,不管是10分钟还是1小时。在
但这也不理想,因为任何长时间运行的任务都会阻止这个槽 完成所有等待的任务。为了减轻这种情况,人们使用路由,这样您就有了一个专用队列,并为必须尽快运行的任务配备了专用的工作人员。在
-
相关问题 更多 >
编程相关推荐