我正在研究一个并行使用数百名工作人员的系统(物理设备评估小任务)。有些工人比其他工人更快,所以我想知道在没有事先了解速度的情况下,最简单的方法是在他们身上加载平衡任务。
我正在考虑使用简单的计数器跟踪工作人员当前正在处理的任务数量,然后对列表进行排序以使工作人员具有最低的活动任务数。这样慢的工作人员会得到一些任务但不会减慢整个系统的速度。我之所以要问的是,目前的循环方法导致一些非常缓慢的工作人员(比其他人慢100倍)不断积累任务并阻止新任务。
根据当前活动任务的数量对列表进行排序应该是一个简单的问题,但由于我会每秒对列表进行几次排序(每个任务的平均工作时间低于25毫秒),我担心这可能是一个主要的瓶颈。因此,有一个简单的版本可以让工作人员获得最低的任务数,而无需一遍又一遍地进行排序。
编辑:任务通过开放的TCP连接推送给工作人员。由于任务之间的依赖关系相当复杂(独占资源使用),所以假设所有任务都被分配为开始。一旦任务从工作人员返回,所有不再被阻止的任务就会排队,并且新任务将被推送到工作人员。工作队列永远不会为空。
答案 0 :(得分:1)
这个系统怎么样:
在这个系统中,由于您在工作人员完成工作时分配新任务,因此您无需猜测剩余任务将花费多长时间。
答案 1 :(得分:0)
我认为您需要提供有关系统的更多信息:
你如何向工人提出任务?工人是要求还是被推? 你怎么知道一个工人是否失业,甚至做了多少工作? 物理设备是如何建模的?
您要做的是避免跟踪任何内容,并找到一种更为被动的方式来分发作品。