线程间负载均衡的启发式算法

Il-*_*ima 8 algorithm load-balancing heuristics scheduling

我正在研究一个多线程程序,我有许多工作线程执行不等长的任务.我想对任务进行负载平衡,以确保它们完成大致相同的工作量.对于每个工作T 我有一个数字c 提供了一个很好的近似认为是必需的任务的工作量.

我正在寻找一个有效的(O(N)N =任务数或更好的)算法,这将给出"大致"给定c i值的良好负载平衡.它不一定是最优的,但我希望能够对结果分配的糟糕程度有一些理论界限.

有任何想法吗?

Mar*_*tin 7

您想要实现工作窃取算法.每个工作线程都有一个双端队列,新任务被添加到最小队列的底部.工作人员从他们自己的队列顶部删除任务(顶部/底部分离减少争用),当一个工人没有更多的工作要做时,它会从最大队列的底部窃取一个工作.它很简单,而且效果很好,这是微软并行系统随附的.net4.0基于我认为的算法.

由此产生的分配非常好,如果整个系统中没有更多可用的作业,工作线程将无需做任何工作.

铌.如果你想要一些示例代码拆开,我的朋友写了一个C#的工作窃取系统,你可以在这里找到