OmnithreadLibrary是否支持"偷工作"?

mjn*_*mjn 5 delphi fork-join omnithreadlibrary

例如,工作窃取在Java平台上的Fork/Join框架中可用.(请参阅fork/join框架如何比线程池更好?) - 与OmniThreadLibrary类似吗?


工作窃取:用尽线索的工作线程可以从其他忙碌的线程中窃取任务.

gab*_*abr 6

我不知道我是否会将这种技术称为"偷工作",但实际上OmniThreadLibrary会在执行Fork/Join抽象时保持所有核心的忙碌.

使用Fork/Join时,通过调用将任务发送到计算池中Compute.当您调用Value以获取子计算的结果或Await等待子计算完成并且子计算尚未完成其工作时,Value/ Await将从计算池中执行另一个任务并执行它.当这个新任务完成后,它将再次检查子计算是否已完成其工作,如果不是,它将处理下一个子任务.

OmniThreadLibrary维基上进一步描述了这种机制.


编辑

我不认为Fork/Join方法应该被称为"偷工作".在OmniThreadLibrary实现中,工作项永远不会分配给线程,直到线程开始执行它.一旦线程开始执行它,没有人可以窃取它,因为没有任何目的.