1. 什么是Fork/Join框架

Fork/Join框架是Java7提供了的一个用于并行执行任务的框架, 是一个把大任务支解成若干个小任务 ,最终汇总每个小任务功效后获得大任务功效的框架。

我们再通过Fork和Join这两个单词来领略下Fork/Join框架,Fork就是把一个大任务切分为若干子任务 并行的执行,Join就是归并这些子任务的执行功效,最后获得这个大任务的功效。好比计较1+2+。。+ 10000,可以支解成10个子任务,每个子任务别离对1000个数举办求和,最终汇总这10个子任务的功效。 Fork/Join的运行流程图如下:

Fork/Join框架简介

2. 事情窃取算法

事情窃取(work-stealing)算法是指某个线程从其他行列里窃取任务来执行。事情窃取的运行流程图 如下:

Fork/Join框架简介

查察本栏目

那么为什么需要利用事情窃取算法呢?如果我们需要做一个较量大的任务,我们可以把这个任务支解 为若干互不依赖的子任务,为了淘汰线程间的竞争,于是把这些子任务别离放到差异的行列里,并为每个 行列建设一个单独的线程来执行行列里的任务,线程和行列一一对应,好比A线程认真处理惩罚A行列里的任务 。可是有的线程会先把本身行列里的任务干完,而其他线程对应的行列里尚有任务期待处理惩罚。干完活的线 程与其等着,不如去帮其他线程干活,于是它就去其他线程的行列里窃取一个任务来执行。而在这时它们 会会见同一个行列,所觉得了淘汰窃取任务线程和被窃取任务线程之间的竞争,凡是会利用双端行列,被 窃取任务线程永远从双端行列的头部拿任务执行,而窃取任务的线程永远从双端行列的尾部拿任务执行。

事情窃取算法的利益是充实操作线程举办并行计较,并淘汰了线程间的竞争,其缺点是在某些环境下 照旧存在竞争,好比双端行列里只有一个任务时。而且耗损了更多的系统资源,好比建设多个线程和多个 双端行列。

JAVA 教程

2017-11-02


1. 什么是Fork/Join框架 Fork/Join框架是Java7提供了的一个用于并行执行任务的框架, 是一个把大任务支解成若干个小任务 ,最终汇总每个小任务功效后获得大任务