<%@ page contentType="text/html; charset=gb2312"%> Java 7的并行支持:Fork/Join
网站公告:   ◆北天JAVA技术网热情为java爱好者服务,本网内容包括JAVA(JSP、servlet、EJB、webservice、j2ee、javabean、应用服务器、JavaScript),数据库(MYSQL、SQL Server、Sybase、Oracle、DB2、数据库综合知识),设计研究(设计模式、Struts、Spring、Hibernate、设计框架、设计综合知识),WEB2.0新技术(主要介绍AJAX),以及各种技术的入门、实例、例子等等,欢迎各位多来坐坐!◆  诚邀各位JAVA爱好者加盟!◆  本网站内容丰富,更新快,保证每周20篇以上!  
加入收藏
设为首页
联系站长
承接项目
  相关资源:网站首页 | 免费培训学院 | 技术论坛 | JAVA聊天室 | 作家专栏 | 开发工具 | 认证考试 | 会员俱乐部
  JAVA技术初学者园地 | jsp与servlet | javascript | Java源代码 | EJB | web service | 应用服务器 | JAVA综合知识
  设计研究设计模式 | 设计框架 | Struts | Spring | Hibernate | 开源项目 | 面向对象设计 | 设计综合知识
  数 据 库MYSQL | SQL Server | Sybase | Oracle | DB2 | Informix | Access | 数据库综合知识
  其他资源:AJAX新技术 | 网站开发 | ERP软件 | OA办公软件 | 商业智能BI | 开发综合知识 | 承接项目 | 项目试用

 
 
Java 7的并行支持:Fork/Join
     发布者: 发布时间:2008-03-27
今天,处理器的内核数量在不断增加,以什么样的方法开发程序才能发挥出新硬件的效能呢?这正变成一个愈发重要的问题摆在了开发者面前。IBM Developerworks已经发布了一篇介绍Fork-Join并发类库的连载文章,Fork-Join类库会作为即将来到的Java 7的一部分进行发布。InfoQ以前也报道过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年早期发布。

TAG:
java7



(转载文章请保留出处:北天JAVA技术网(www.java114.com))
 
更多精彩文章:
用STOMP集成Flex3.0和RabbitMQ
用STOMP集成Flex3.0和RabbitMQ
Java的核心升级 JDK 6 + JRE 6 Update 4
Java的核心升级 JDK 6 + JRE 6 Update 4
Sun为FireFox3.0与IE提供了更好的Java支持
Sun为FireFox3.0与IE提供了更好的Java支持
 
最近评论:
        
鍥炲
        
鍥炲
        
标 题:   
内 容:   
 
                                  
 
免责声明:该文章由网友发表,如果对您造成侵权,请联系站长

首页 - 承接项目 - 网站地图 - 联系我们 -
版权所有北天JAVA技术工作室 ICP证号:粤ICP备06079815号