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

来源:互联网 发布:姚明nba打球平均数据 编辑:程序博客网 时间:2024/05/19 00:10

原文作者: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或
http://gee.cs.oswego.edu/dl/classes/EDU/oswego/cs/dl/util/concurrent/intro.html获得。
0 0
原创粉丝点击