我正在阅读有关并发运行时的文章,本文中有一个名为work stealing
的算法。但我不知道这个算法是什么!所以我想要一些解释或一些很好的链接,可以帮助我做一个关于这个算法的演示。
答案 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:00
(Daan Leijen)
答案 3 :(得分:1)
您可以查看英特尔TBB算法的任务调度程序,它正在使用工作窃取模式。见https://software.intel.com/fr-fr/node/468190