Fork/Join 框架 in Java 摘要&前言

原文作者:Doug Lea               State University of New York at Oswego               

原文地址:点击此处


摘要

这篇文章从设计、实现和性能三个方面描述了一个支持并行编程方式的Java框架。使用该框架,我们可以通过将许多大规模的问题递归地分解成许多子任务,进而可以并行地解决这些子任务,然后等所有子任务计算完成后将所有的计算结果组合起来(一般按串行的方式)。其大体的设计就是一个工作窃取(work-stealing)框架的变体。(注:work-stealing框架是为英特尔的Cilk语言设计的。)主要的实现技术是围绕任务队列(tasks queues)和工作线程(worker threads)的有效构建和管理进行的。实测性能显示好的并行可提升大多数程序的速度,但是也同时暗示存在待改进的可能性。

1.前言

对于获得好的并行性能而言,Fork/Join并行模型是最简单和最高效的设计技术。Fork/Join算法跟分治算法很相似,可以说是分治法的并行化版本,可形式化地描述为:
Result solve(Problem problem) {
if (problem is small) {
directly solve problem
}
else {
split problem into independent parts
fork new subtasks to solve each part
join all subtasks
compose result from subresults
}
}
fork操作:开启一个新的并行 fork/join 子任务;
join操作:与java线程中join操作的作用一样,阻止当前任务继续处理直到被fork的子 任务全部完成。
Fork/join算法,同其他分治算法类似,总是递归执行的,即:重复一层一层分解子任务直到所得到的子任务足够地小,小到用简单、简短的串行方法就可以解决。

还有一些相关的编程技术和示例在《Concurrent Programming in Java,second edition》的4.4节中有被讨论到。本篇论文会讨论针对一个名为FJTask的java框架的设计(第二部分)、实现(第三部分)和性能(第四部分)。该框架可以支持并行编程方式。
FJTask作为util.concurrent包的一部分,可以从http://gee.cs.oswego.edu
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值