对此没有一刀切的答案
- 将一个大任务 A 分成许多小部分(A¹、A²、A³、...)将增加潜在的并发性。
因此,如果您有 1 个具有 10 个工作线程/进程的工作实例,A 现在可以使用 10 个线程并行运行,而不是在一个线程上按顺序运行。
部分的数量称为任务粒度(细粒度或粗粒度)。
每个部分必须有足够的计算/IO 来抵消将任务消息发送到代理的开销,如果没有工作人员接收它,可能会将其写入磁盘,工作人员接收消息等等(请注意消息传递可以调整开销,例如,您可以有一个临时队列(不将消息持久化到磁盘),并发送在那里不那么重要的任务)。
如果您有一个繁忙的集群(例如,3 个工作实例,每个实例有 10 个线程/进程,所有正在运行的任务),则可能已经实现了最大并行度。
那么你很多人通过划分任务并没有得到太多好处,但是执行 I/O 的任务比 CPU 密集型任务(按 I/O 操作划分)有更大的改进机会。
工人对长时间运行的任务不过敏,无论是 10 分钟还是一个小时。
但这也不理想,因为任何长时间运行的任务都会阻止该插槽完成任何等待任务。为了缓解这种情况,人们使用路由,以便您拥有一个专用队列,并为必须尽快运行的任务配备专门的工作人员。
-