频 道 直 达 - 新闻 - 读书 - 培训 - 教程 - 前沿 - 组网 - 系统应用 - 安全 - 编程 - 存储 - 操作系统 - 数据库 - 服务器 - 专题 - 产品 - 案例库 - 技术圈 - 博客 - BBS
51CTO.COM_中国领先的IT技术网站
找资料:

Java 7的并行支持:Fork/Join

作者: R.J. Lorimer/韩锴 编译 出处:InfoQ中文站 2008-03-26 09:27    砖    好    评论   进入论坛
阅读提示:处理器的内核数量在不断增加,以什么样的方法开发程序才能发挥出新硬件的效能呢?Fork-Join类库会作为即将来到的Java 7的一部分进行发布。本文讲述Java 7的并行支持:Fork/Join。根据当前的状况估计,Java 7会在2009年早期发布。

今天,处理器的内核数量在不断增加,以什么样的方法开发程序才能发挥出新硬件的效能呢?这正变成一个愈发重要的问题摆在了开发者面前。IBM Developerworks已经发布了一篇介绍Fork-Join并发类库的连载文章,Fork-Join类库会作为即将来到的Java 7的一部分进行发布。作者以前也报道过Java 7中最初的fork/join提案,其中还包含来自最初创建者Doug Lea的反馈。Doug Lea在他的论文“Fork/Join Parallelism in Java”中,首次把fork/join的概念引入到Java中。Doug Lea的util.concurrent包是JSR-166的基础,后者是发布在Java 5中的java.util.concurrentl类库。Fork/Join是对JSR-166的简单修订。

连载文章的第一部分详细介绍了fork-join类库的核心概念,以及它要解决的问题:

硬件的发展趋势非常清晰;Moore定律表明不会出现更高的时钟频率,但是每个芯片上会集成更多的内核。很容易想象让十几个处理器繁忙地处理一个粗粒度的任务边界(比如一个用户请求),但是这项技术不会扩大到数千个处理器——在这种环境下短时间内流量可能会呈指数级增长,但最终硬件趋势将会占上风。当跨入多内核时代时,我们需要找到更细粒度的并行性,否则将面临即便有许多工作需要去做而处理器却仍处于空闲的风险。如果希望跟上技术发展的脚步,软件平台也必须配合主流硬件平台的转变。最终,Java 7将会包含一种框架,用于表示某种更细粒度级别的并行算法:fork-join框架。

第二部分深入探讨了在第一部分里定义的概念,涉及到分而治之(divide-and-conquer)的编程技术:

Fork-join融合了分而治之技术;获取问题后,递归地将它分成多个子问题,直到每个子问题都足够小,以至于可以高效地串行地解决它们。递归的过程将会把问题分成两个或者多个子问题,然后把这些问题放入队列中等待处理(fork步骤),接下来等待所有子问题的结果(join步骤),把多个结果合并到一起。

文章接下来展示了一个使用fork/join实现合并排序(merge-sort)算法的示例。

这个连载系列的最后一部分介绍了ParallelArray类。ParallelArray是一个可用于fork/join算法的数据结构,它提供了一个通用目的API,以高度并发的方式执行数据集的搜索、过滤和转换。

从事Java的BGGA闭包提案的团队已经采纳了fork-join框架与闭包协同工作。他们还在站点上提供了一个可以工作的实现。Developerworks上的那篇连载文章列举了两个使用ParallelArray类的例子,它们之间的区别在于是否使用了闭包:

下面的例子是查找一组学生中最好的GPA,它用到了当前Java 7的fork/join提案:

ParallelArray students = new ParallelArray(fjPool, data);
double bestGpa = students.withFilter(isSenior)
.withMapping(selectGpa)
.max();
public class Student {
String name;
int graduationYear;
double gpa;
}
static final Ops.Predicate isSenior = new Ops.Predicate() {
public boolean op(Student s) {
return s.graduationYear == Student.THIS_YEAR;
}
};
static final Ops.ObjectToDouble selectGpa = new Ops.ObjectToDouble() {
public double op(Student student) {
return student.gpa;
}
};
下面的例子与上面的相同,不过使用了BGGA闭包提案:
double bestGpa = students.withFilter({Student s => (s.graduationYear == THIS_YEAR) })
.withMapping({ Student s => s.gpa })
.max();

根据当前的状况估计,Java 7会在2009年早期发布。

原文链接:http://www.infoq.com/cn/news/2008/03/fork_join

【责任编辑:碧海蓝天 TEL:(010)68476606】


关于 Java  Fork  Join  Java 7
专题
Java实用开发全集
Java类的基础教程专题
Java发展动态专题
Java编程开发手册
Java基础教程
我也说两句

匿名发表

(如果看不清请点击图片进行更换)


中 国 领 先 的 IT 技 术 网 站 ·
技 术 成 就 梦 想
·Java基础教程 (查看71609次)
·UML类图详解 (查看64677次)
·UML统一建模语言 (查看35210次)
·C#技术开发指南 (查看34017次)
·C++是垃圾语言?! (查看32453次)
·Java编程开发手册 (1196个砖)
·Java基础教程 (429个砖)
·C#技术开发指南 (309个砖)
·.NET开发手册 (240个砖)
·PB开发教程 (223个砖)
·Java编程开发手册 (654个好)
·Java基础教程 (574个好)
·.NET开发手册 (271个好)
·PB开发教程 (212个好)
·Delphi开发技术手册 (190个好)
订阅技术快讯
电子杂志下载
名称:SQL Server数据库管理精品黄皮书
简介:书中文章经过精挑细选,便于用户能根据自己的实际工作和学习,快速在本书寻找到相关资料。内容涵盖了SQL Server的安装与升级、语句查询、数据备份和恢复、自动化任务、数据同步、数据字典、安全和预防、性能和优化、集群等各方面应用信息,以及DBA管理人员在数据库管理工作中
名称:2007路由技术大全
简介:《2007路由技术大全》由51CTO.com网站特别策划制作,该书包括路由器技术、路由器产品、路由器配置、安全设置、路由器故障处理、路由器密码恢复,以及广大网友在实践使用中的心得经验和技巧文章,内容注重实用性,适用于初学者入门,也适合多年从业者提高,是一本实践和理论完
名称:网络安全精品应用黄皮书
简介:《2007精品网络安全黄皮书》包括了9个大类24个小类, 800余篇文章,内容包含了熊猫烧香病毒、DDOS攻击、ARP病等热点问题的介绍及解决方案。从病毒查杀、防范、系统、数据等各方面的安全设置到黑客技术的了解、防范,涉及到了安全应用的全部领域, 由浅至深内容全面。