面试官:谈谈你对Fork/Join的并行计算框架的了解?使用Fork/Join有哪些要注意的常见错误

本文介绍了分治思想及其在算法中的应用,如MapReduce、归并排序和快速排序。接着讲解了Java的Fork/Join框架,用于处理并行计算的分治情况。ForkJoinPool作为治理任务的线程池,使用双端队列和任务窃取机制来提高效率。ForkJoinTask是分治任务的抽象类,包括RecursiveAction和RecursiveTask两个子类,用于无返回值和有返回值的递归任务。文章还通过斐波那契数列展示了Fork/Join框架的简单应用。

 

现实生活中的分治

分治的思想,顾名思义分而治之。就像古代的王想治理好天下,单单靠他一个人是不够的,还需要大臣的辅助,把天下划分为一块块区域,分派的下面的人负责,然后下面的人又分派给他们的属下负责,层层传递。

这就是分治,也就是把一个复杂的问题分解成相似的子问题,然后子问题再分子问题,直到问题分的很简单不必再划分了。然后层层返回问题的结果,最终上报给王!

分治在算法上有很多应用,类似大数据的MapReduce,归并算法、快速排序算法等。
在JUC中也提供了一个叫Fork/Join的并行计算框架用来处理分治的情况,它类似于单机版的 MapReduce

 

Fork/Join

分 治分为两个阶段,第一个阶段分解任务,把任务分解为一个个小任务直至小任务可以简单的计算返回结果。

第二阶段合并结果,把每个小任务的结果合并返回得到最终结果。而Fork就是分解任务,Join就是合并结果。

Fork/Join框架主要包含两部分:ForkJoinPool、ForkJoinTask

 

ForkJoinPool

就是治理分治任务的线程池。它和在之前的文章提到ThreadPoolExecutor线程池,共同点都是消费者-生产者模式的实现,但是有一些不同。ThreadPoolExecutor的线程池是只有一个任务队列的,而F

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值