在 Doug Lea 的论文“A Java Fork/Join Framework”中:
http://gee.cs.oswego.edu/dl/papers/fj.pdf
在 2.1 Work-Stealing 中他说:
When a worker thread encounters a join operation, it processes other tasks, if available, until the target task is noticed to have completed (via isDone). All tasks otherwise run to completion without blocking.
那么谁能具体告诉我这些“其他任务”是从哪里来的呢?它们来自其他工作线程的任务队列吗?这是否意味着每当工作线程遇到连接调用时,它就会继续“从其他线程窃取任务”而不是“跳到自己队列中的其他任务”?
最佳答案
“其他任务”可能在有待处理任务时来自自己的双端队列,其他线程的双端队列,或者来自新请求的提交队列。
join() 是一个相当困难的过程。它涉及到任务控制,即在任务处于 Activity 处理和暂停等待状态时能够控制任务。在应用程序中这样做通常是行不通的。 (操作系统做得很好,Cilk、JCilk 通过使用编译器/运行时来做到这一点。)Doug Lea 在连接陷入工作线程时使用“延续线程”。
关于java - 有关 Fork-Join 框架的详细信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10103204/