华为|Java:Java中的Fork/Join框架的并行编程基础( 二 )


2、ForkJoinPool:这个类提供了一个公共池来管理 ForkJoinTask 任务的执行 。 它基本上为非 ForkJoinTask 客户端的提交以及管理和监控操作提供了入口点 。
3、RecursiveAction:这也是 ForkJoinTask 类的抽象扩展 。 通常 , 我们扩展此类以创建不返回结果或具有 void 返回类型的任务 。 此类中定义的 compute() 方法被覆盖以包含任务的计算代码 。
4、RecursiveTask:这是 ForkJoinTask 类的另一个抽象扩展 。 我们扩展这个类来创建一个返回结果的任务 。 而且 , 与 ResursiveAction 类似 , 它还包括一个受保护的抽象 compute() 方法 。 此方法被覆盖以包括任务的计算部分 。

Fork/Join 框架策略
该框架采用递归分治策略来实现并行处理 。 它基本上将一个任务分成更小的子任务;然后 , 将每个子任务进一步划分为子子任务 。 这个过程递归地应用于每个任务 , 直到它小到可以按顺序处理 。 假设我们要增加 N 个数字的数组的值 。 这就是任务 。 现在 , 我们可以将数组一分为二 , 创建两个子任务 。 将它们中的每一个再次划分为另外两个子任务 , 依此类推 。 通过这种方式 , 我们可以递归地应用分而治之的策略 , 直到将任务挑出到一个单元问题中 。 然后 , 这个单元问题可以由可用的多核处理器并行执行 。 在非并行环境中 , 我们要做的就是循环遍历整个数组 , 依次进行处理 。 鉴于并行处理 , 这显然是一种低效的方法 。 但是 , 真正的问题是每一个问题都可以分而治之吗?绝对不!但是 , 有些问题通常涉及某种特别适合这种方法的数据数组、集合和分组 。 顺便说一句 , 有些问题可能不使用数据收集 , 但可以优化以使用并行编程策略 。
结论
这是对并行编程及其在 Java 中的支持方式的简要描述 。 一个公认的事实是 , 拥有 N 个内核并不会让一切都快 N 倍 。 只有一部分 Java 应用程序有效地使用了这个特性 。 并行编程代码是一个困难的框架 。 此外 , 有效的并行程序必须考虑负载平衡、并行任务之间的通信等问题 , 有一些算法更适合并行执行 , 但很多不适合 。 无论如何 , Java API并不缺乏它的支持 , 我们可以随时修改 API 以找出最适合的 API 。