使用GPars解决常见并发问题 - 编程入门网
法
使用GPars解决常见并发问题(5)时间:2012-03-17 IBM Alex MillerIF条件允许我改变每个任务的粒度。该风格的算法将生成一棵树,其中树叶由采用 THEN分支的任务定义。树中的内部节点是采用 ELSE分支的任务。每个内部节点必须等待(依赖于)其两个(或多个)子任务。fork/join 模型是专为这种算法设计的,即一棵依赖树中有大量任务在等待中。fork/join 中处于等待中的任务实际上不阻止线程。 GPars 允许我们通过执行 fork/join 任务来创建和执行 fork/join 算法,如清单 6 所示: 清单 6. max() (computeMax.groovy) 的并行 fork/join 实现
注意,fork/join 在 groovyx.gpars.GParsPool类中拥有其特定的线程池。GParsPool与 GParsExecutorsPool共享多个常见功能,但拥有 fork/join 所特有的功能。要直接使用 fork/join,您必须使用带有一个任务闭包的 runForkJoin()方法或一个将 AbstractForkJoinWorker分为子类的任务类。 并行集合 Fork/join 提供一种不错的方式来定义和执行并行任务结构,特别是分而治之算法中的那些结构。不过,您可能已经注意到,上面的示例中涉及到相当多的繁文缛节。我必须定义任务闭包、确定合适的任务粒度、分离子问题、综合结果,等等。 理论上,我希望在更高抽象级别工作,即定义一个数据结构,然后并行对其执行常见操作,无需在每种情况下定义管理细节的低级别任务。 JSR 166y 维护更新指定为此指定一个高级接口,称为 ParallelArray。ParallelArray对一个数组结构提供常见的函数程序设计操作,这些函数通过一个 fork/join 池并行执行。 由于 API 的函数特性,传递一个函数(方法)给这些操作很有必要,这样就可以在 ParallelArray中的每个项目上执行它。JDK 7 仍在开发中的一项功能是对 λ 的支持,该功能允许开发人员定义和传递代码块。此时,JDK 7 中所含 ParallelArray的状态有待 λ 项目结果定夺。 使用GPars解决常见并发问题(6)时间:2012-03-17 IBM Alex MillerGPars 中的 ParallelArray Groovy 完全支持将代码块定义为闭包并将它们 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |