工作窃取算法

时间:2012-01-31 14:40:48

标签: algorithm queue work-stealing

我正在阅读有关并发运行时的文章,本文中有一个名为work stealing的算法。但我不知道这个算法是什么!所以我想要一些解释或一些很好的链接,可以帮助我做一个关于这个算法的演示。

4 个答案:

答案 0 :(得分:13)

答案 1 :(得分:9)

我最近阅读了这篇论文,其中描述了一个带有工作窃取算法的Java Fork / Join框架here

从那篇论文中我们开始:

Result solve(Problem problem) {
    if (problem is small)
       directly solve problem
    else {
       split problem into independent parts
       fork new subtasks to solve each part
       join all subtasks
       compose result from subresults
    }
}

那些分叉的子任务(else块中的第2行)可以递归地创建更多的子任务,从而填充并行工作线程的工作队列。如果一个线程完成并且没有其他任何操作,他可以​​从另一个线程的队列中“窃取”该工作。

简而言之,对于我建议查看论文的所有细节。

答案 2 :(得分:5)

您可以在以下Channel9视频中找到工作窃取算法的相当不错且易于理解的解释:"Parallel Extensions: Inside the Task Parallel Going Deep" Duffy, Huseyin Yildiz, Daan Leijen, Stephen Toub,请参阅00:44:00Daan Leijen

答案 3 :(得分:1)

您可以查看英特尔TBB算法的任务调度程序,它正在使用工作窃取模式。见https://software.intel.com/fr-fr/node/468190