例如,在Java平台上的Fork / Join框架中可以使用偷取工作。(参见分叉/连接框架如何比线程池更好?) -- OmniThreadLibrary也有类似的可能吗?
工作窃取:工作线程用完了要做的事情,就可以从其他仍然繁忙的线程中窃取任务。
发布于 2012-07-06 19:17:07
我不知道是否会将这种技术称为“工作偷取”,但实际上,在执行Fork/Join抽象时,OmniThreadLibrary会让您的所有内核都很忙。
使用Fork/Join时,通过调用Compute将任务发送到计算池中。当您调用Value以获得子计算的结果,或者调用Await等待子计算完成,而子计算尚未完成时,Value/Await将从计算池中取出另一个任务并执行它。当这个新任务完成后,它将再次检查子计算是否完成了它的工作,如果没有,它将处理下一个子任务。
这一机制将在OmniThreadLibrary维基上进一步描述。
编辑
我不认为Fork/Join方法应该被称为“偷工作”。在OmniThreadLibrary实现中,直到线程开始执行工作项,才会将工作项分配给线程。一旦线程开始执行它,就没有人能够窃取它,因为这样做是没有意义的。
https://stackoverflow.com/questions/11366454
复制相似问题