现实生活中的分治
分治的思想,顾名思义分而治之。就像古代的王想治理好天下,单单靠他一个人是不够的,还需要大臣的辅助,把天下划分为一块块区域,分派的下面的人负责,然后下面的人又分派给他们的属下负责,层层传递。
这就是分治,也就是把一个复杂的问题分解成相似的子问题,然后子问题再分子问题,直到问题分的很简单不必再划分了。然后层层返回问题的结果,最终上报给王!

分治在算法上有很多应用,类似大数据的MapReduce,归并算法、快速排序算法等。
在JUC中也提供了一个叫Fork/Join的并行计算框架用来处理分治的情况,它类似于单机版的 MapReduce。
Fork/Join
分 治分为两个阶段,第一个阶段分解任务,把任务分解为一个个小任务直至小任务可以简单的计算返回结果。
第二阶段合并结果,把每个小任务的结果合并返回得到最终结果。而Fork就是分解任务,Join就是合并结果。
Fork/Join框架主要包含两部分:ForkJoinPool、ForkJoinTask。
ForkJoinPool
就是治理分治任务的线程池。它和在之前的文章提到ThreadPoolExecutor线程池,共同点都是消费者-生产者模式的实现,但是有一些不同。ThreadPoolExecutor的线程池是只有一个任务队列的,而F

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


被折叠的 条评论
为什么被折叠?



