fork/join模式中fork和invokeAll的区别
2017-07-31 17:58
501 查看
有一类问题,他们的本质上是将一个问题划分成多个子问题,然后再逐个的去解决子问题。在很多情况下,他们这些子问题是互不相干的。也就是说,我们针对他们每个执行的子问题,可以让他们采用独立的线程来运行。这样的话我们可以充分的发挥现在并行处理器的优势。
在fork/join模式中,我们在子任务中常常使用fork方法来让子任务采取异步方法执行,但是这不是高效的实现方法,尤其是对于forkjoinPool在线程有限的情况下,子任务直接使用fork方法执行时间比使用invokeAll执行时间要长。下面分析一下原理:
对于fork/join模式,假如pool里面线程数量是固定的,那么调用子任务的fork方法相当于A先分工给B,然后A当监工不干活,B去完成A交代的任务。所以上面的模式相当于浪费了一个线程。那么如果使用invokeAll相当于A分工给B后,A和B都去完成工作。这样缩短了执行的时间。
在fork/join模式中,我们在子任务中常常使用fork方法来让子任务采取异步方法执行,但是这不是高效的实现方法,尤其是对于forkjoinPool在线程有限的情况下,子任务直接使用fork方法执行时间比使用invokeAll执行时间要长。下面分析一下原理:
对于fork/join模式,假如pool里面线程数量是固定的,那么调用子任务的fork方法相当于A先分工给B,然后A当监工不干活,B去完成A交代的任务。所以上面的模式相当于浪费了一个线程。那么如果使用invokeAll相当于A分工给B后,A和B都去完成工作。这样缩短了执行的时间。
相关文章推荐
- [JAVA学习笔记-53]ForkJoin_invoke_submit_execute
- Fork/Join模式(JSR166y)手记之TransferQueue/LinkedTransferQueue
- JDK 7 中的 Fork/Join 模式
- Fork/Join模式(JSR166y)手记之ThreadLocalRandom
- 使用fork/join,生产者-消费者模式和lucene搜索文件
- 数据库中的union和union all 和join的区别
- 任务的批量提交invokeAll两种方法的区别
- [RxJSv& Javascript] forkJoin (reactive Promise.all) & Map
- 优化模式区别(all_rows & first_rows_n)
- JDK 7 中的 Fork/Join 模式
- 优化模式区别(all_rows & first_rows_n)
- JDK 7 中的 Fork/Join 模式 轻松实现多核时代的并行计算
- 由Intel的TBB想到fork-join模式
- JDK 7 中的 Fork/Join 模式
- JDK 7 中的 Fork/Join 模式 轻松实现多核时代的并行计算
- left join/right join/inner join/union/union all 的区别
- JDK 7 中的 Fork/Join 模式
- JDK 7 中的 Fork/Join 模式 简单入门
- JDK 7 中的 Fork/Join 模式
- JDK 7 中的 Fork/Join 模式