例如,Java平台上的Fork / Join框架中提供了工作窃取。 (参见How is the fork/join framework better than a thread pool?) - 与OmniThreadLibrary有类似的东西吗?
工作窃取:工作线程耗尽的事情可以从其他人那里窃取任务 线程仍然很忙。
答案 0 :(得分:6)
我不知道我是否会将这种技术称为“偷工作”,但实际上OmniThreadLibrary会在执行Fork / Join抽象时保持所有核心的忙碌。
使用Fork / Join时,通过调用Compute
将任务发送到计算池中。当您致电Value
以获取子计算结果或Await
等待子计算完成且子计算尚未完成其工作时,Value
/ Await
将从计算池中获取另一个任务并执行它。当这个新任务完成后,它将再次检查子计算是否已完成其工作,如果没有,它将处理下一个子任务。
此机制在OmniThreadLibrary wiki进一步描述。
修改
我不认为Fork / Join方法应该被称为“偷工作”。在OmniThreadLibrary实现中,工作项永远不会分配给线程,直到线程开始执行它。一旦线程开始执行它,没有人可以窃取它,因为没有任何目的。