fork/join模式中fork和invokeAll的区别

Posted 彭薄

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了fork/join模式中fork和invokeAll的区别相关的知识,希望对你有一定的参考价值。

  有一类问题,他们的本质上是将一个问题划分成多个子问题,然后再逐个的去解决子问题。在很多情况下,他们这些子问题是互不相干的。也就是说,我们针对他们每个执行的子问题,可以让他们采用独立的线程来运行。这样的话我们可以充分的发挥现在并行处理器的优势。   

  在fork/join模式中,我们在子任务中常常使用fork方法来让子任务采取异步方法执行,但是这不是高效的实现方法,尤其是对于forkjoinPool在线程有限的情况下,子任务直接使用fork方法执行时间比使用invokeAll执行时间要长。下面分析一下原理:

  对于fork/join模式,假如pool里面线程数量是固定的,那么调用子任务的fork方法相当于A先分工给B,然后A当监工不干活,B去完成A交代的任务。所以上面的模式相当于浪费了一个线程。那么如果使用invokeAll相当于A分工给B后,A和B都去完成工作。这样缩短了执行的时间。

  

以上是关于fork/join模式中fork和invokeAll的区别的主要内容,如果未能解决你的问题,请参考以下文章

java7-Fork/Join

线程基础:多任务处理(13)——Fork/Join框架(解决排序问题)

Fork/Join框架

Java fork join ForkJoinPool 用法例子

多线程 fork/join 并行计算

JAVA并行框架Fork/Join:同步和异步