在我的解决方案中,我使用分布式任务来监视硬件实例一段时间(比如10分钟)。我必须在以下时间做一些事情:
在整个会话(10分钟)内运行单个任务并执行所有这些任务是否安全,还是应该将这些操作拆分为自己的任务?
我认为单个任务的优点是管理和实施时序约束会更容易。但是:
运行大量(大多数)睡着的工人是不是一个好主意?例如,如果我知道最多会打开200个会话,我会有500名工作人员,以确保总有可用的“会话”席位吗?
答案 0 :(得分:10)
这个
没有一个通用的答案因此,如果您有1个具有10个工作线程/进程的工作器实例, 现在可以使用10个线程而不是按顺序并行运行 在一个线程上。
部件数量称为任务粒度(精细或粗粒度)。
每个部分必须有足够的计算/ IO来抵消发送任务的开销 向代理发送消息,如果没有工作人员可以将其写入磁盘,接收消息的工作人员等等(请注意,可以调整消息传递开销,例如,您可以拥有一个瞬态队列(不是将消息保存到磁盘),并发送那些不那么重要的任务。)
如果您有一个繁忙的集群,可能已经实现了最大并行度(例如,每个工作室实例包含10个线程/进程,所有正在运行的任务)。
然后你通过划分任务获得了很多好处,但是做I / O的任务比CPU绑定任务有更大的改进机会(由I / O操作拆分)。
工作人员不会对长时间的任务过敏,不论是10分钟还是一小时。
但它也不理想,因为任何长时间运行的任务都会阻止该插槽 完成任何等待任务。为了缓解这种情况,人们使用路由,以便您拥有一个专用队列,为必须尽快运行的任务提供专用工作人员。
-