在ForkJoinPool
ForkJoinTask
中,当前工作线程是否参与工作窃取?当前员工是否参与偷工作?
我已阅读的意义,一个叉连接池可以从工作阻塞或等待的线程窃取。目前的工人似乎是一个明显的人选。一旦工人在另一个任务上调用.join()
,那么该任务基本上被阻止。
另一方面,我看到许多文章暗示不同的结论。例如,目前的工作线程应该在等待分支任务之前工作的普遍共识。
有迹象表明,讨论如何利用ForkJoinTask.getSurplusQueuedTaskCount
由具有当前工人平衡在队列中的工作方法的几篇文章做一些工作。如果当前的工作人员也在偷窃,那么这似乎不是必要的。
当然,我想最大化线程操作并保持所有工作最大限度地运行。了解当前线程是否也在偷窃工作(例如,当调用.join
时)将有助于澄清。
你需要一个特定类型的问题,它是最大看到http://stackoverflow.com/questions/7926864/ fork-join-framework-better-a-thread-pool –
我写了其中一篇文章,我可以保证你的join()不会导致窃取工作http:// coopsoft .com/ar/Calamity2Article.html#join工作窃取仅在deque为空时有效。就个人而言,我不会用getSurplus来微观管理框架....等等。 – edharned