1

我正在开发一个并行使用数百个工作人员的系统(评估小任务的物理设备)。有些工人比其他工人快,所以我想知道在没有先验了解他们的速度的情况下,在他们身上负载平衡任务的最简单方法是什么。

我正在考虑使用一个简单的计数器来跟踪工作人员当前正在处理的任务数量,然后对列表进行排序以获得活动任务计数最低的工作人员。这样,缓慢的工作人员将获得一些任务,但不会减慢整个系统的速度。我问的原因是当前的循环方法导致一些非常慢的工作人员(比其他工作人员慢 100 倍)不断累积任务并阻止新任务。

根据当前活动任务的数量对列表进行排序应该是一件简单的事情,但是由于我会每秒对列表进行多次排序(每个任务的平均工作时间低于 25 毫秒),我担心这可能是一个主要瓶颈. 那么是否有一个简单的版本可以让工作人员的任务数最少,而不必一遍又一遍地排序。

编辑:任务通过开放的 TCP 连接推送给工作人员。由于任务之间的依赖关系相当复杂(独占资源使用),因此我们假设所有任务都被分配开始。一旦任务从工作人员返回,所有不再阻塞的任务都会排队,并将新任务推送给工作人员。工作队列永远不会是空的。

4

2 回答 2

1

这个系统怎么样:

  • Worker 到达其任务队列的末尾
  • Worker 向负载均衡器请求更多任务
  • 负载均衡器分配 N 个任务(其中 N 可能大于 1,如果这些任务非常小,则可能是 20 - 50)。

在这个系统中,由于您是在工人实际完成时分配新任务,因此您不必猜测剩余任务需要多长时间。

于 2012-02-08T22:05:11.020 回答
0

我认为您需要提供有关系统的更多信息:

如何将任务交给工人?工人是要求它还是被推动?你怎么知道一个工人是否失业,或者它正在做多少工作?物理设备是如何建模的?

您想要做的是避免跟踪任何事情并找到一种更被动的方式来分发工作。

于 2012-02-09T00:49:26.273 回答