【发布时间】:2012-02-08 21:57:27
【问题描述】:
我正在开发一个系统,该系统同时使用数百个工作人员(评估小型任务的物理设备)。有些工人比其他工人快,所以我想知道在不事先了解他们的速度的情况下,在他们身上负载平衡任务的最简单方法是什么。
我正在考虑使用一个简单的计数器来跟踪工作人员当前正在处理的任务数量,然后对列表进行排序以获取具有最低活动任务计数的工作人员。这样,缓慢的工作人员将获得一些任务,但不会减慢整个系统的速度。我要问的原因是,当前的循环方法导致一些非常慢的工作人员(比其他工作人员慢 100 倍)不断积累任务并阻止新任务。
根据当前活动任务的数量对列表进行排序应该是一件简单的事情,但由于我会每秒对列表进行多次排序(每个任务的平均工作时间低于 25 毫秒),我担心这可能是一大瓶颈。那么有没有一个简单的版本可以让任务数量最少的工作人员无需一遍又一遍地排序。
编辑:任务通过开放的 TCP 连接推送给工作人员。由于任务之间的依赖关系相当复杂(排他性资源使用),因此我们假设所有任务都被分配开始。一旦任务从工作人员返回,所有不再被阻塞的任务都会排队,并将新任务推送给工作人员。工作队列永远不会是空的。
【问题讨论】:
标签: scheduled-tasks scheduling multitasking worker