写点什么

Java 7 的并行支持:Fork/Join

  • 2008-03-23
  • 本文字数:1520 字

    阅读完需:约 5 分钟

今天,处理器的内核数量在不断增加,以什么样的方法开发程序才能发挥出新硬件的效能呢?这正变成一个愈发重要的问题摆在了开发者面前。 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);<br></br>double bestGpa = students.withFilter(isSenior)<br></br> .withMapping(selectGpa)<br></br> .max();<p>public class Student {</p><br></br> String name;<br></br> int graduationYear;<br></br> double gpa;<br></br>}<p>static final Ops.Predicate isSenior = new Ops.Predicate() {</p><br></br> public boolean op(Student s) {<br></br> return s.graduationYear == Student.THIS_YEAR;<br></br> }<br></br>};<p>static final Ops.ObjectToDouble selectGpa = new Ops.ObjectToDouble() {</p><br></br> public double op(Student student) {<br></br> return student.gpa;<br></br> }<br></br>};<br></br> 下面的例子与上面的相同,不过使用了 BGGA 闭包提案:
double bestGpa = students.withFilter({Student s => (s.graduationYear == THIS_YEAR) })<br></br> .withMapping({ Student s => s.gpa })<br></br> .max();<br></br> 根据当前的状况估计,Java 7 会在 2009 年早期发布。查看英文链接: Parallelism with Fork/Join in Java 7

2008-03-23 22:063608
用户头像

发布了 53 篇内容, 共 15.3 次阅读, 收获喜欢 2 次。

关注

评论

发布
暂无评论
发现更多内容

PD 源码分析- Checker: region 健康卫士

TiDB 社区干货传送门

TiKV 源码解读

重磅 | 基金会为白金、黄金、白银捐赠人授牌

kk-OSC

开放原子全球开源峰会

开放原子开源基金会秘书长孙文龙 | 凝心聚力,共拓开源

kk-OSC

开放原子全球开源峰会

AI全流程开发难题破解之钥

华为云开发者联盟

人工智能 华为云

CSDN TOP1“一个处女座的程序猿“如何通过写作成为百万粉丝博主

Lansonli

7月月更 如何写作

LED透明屏和LED玻璃显示屏区别

Dylan

LED显示屏 户外LED显示屏 led显示屏厂家

参加web前端培训入门学习

小谷哥

大数据培训技术入门

小谷哥

Alluxio为Presto赋能跨云的自助服务能力

Alluxio

数据架构 presto 跨云 Alluxio

参加Java培训学习哪些方法

小谷哥

TiCDC同步延迟问题处理

TiDB 社区干货传送门

实践案例 管理与运维 故障排查/诊断 大数据场景实践

命里有时终须有--记与TiDB的一次次擦肩而过

TiDB 社区干货传送门

人物访谈 社区活动

2022年企业直播行业发展洞察

易观分析

数据分析 报告 企业直播

QCon大会广州站它来了!独家定制双肩背包等你领取!

InfoQ写作社区官方

Qcon

推荐算法的三大研究热点

博文视点Broadview

即学即用的问题解决思维,给无意识的生活装上“后视镜”

图灵教育

云图说丨华为云区块链引擎服务:高安全的区块链技术服务平台,轻松部署,快速上链

华为云开发者联盟

区块链 华为云 引擎 BCS

多元宇宙:重塑新商业格局

智捷云

元宇宙 智捷云 智捷云科技

大数据培训机构应该注意什么

小谷哥

Dapr相比于SpringCloud和Istio的优势在哪?

王小凡

Java 程序员 istio SpringCloud 微服务框架

TiDB 操作实践 -- 备份与恢复

TiDB 社区干货传送门

备份 & 恢复

开源峰会抢先看 | 7 月 29 日分论坛 & 活动议程速览

kk-OSC

开放原子全球开源峰会

共建共享数字世界的根:阿里云打造全面的云原生开源生态

阿里巴巴云原生

阿里云 容器 云原生 开源生态

web前端培训好还是自学前端

小谷哥

专访 | 阿里巴巴首席技术官程立:云 + 开源共同形成数字世界的可信基础

kk-OSC

开放原子全球开源峰会

聊聊性能测试环境搭建

老张

性能测试 环境搭建

一键搭建博客:如何使用WordPress插件搭建专属博客

hum建应用专家

Wordpress 部署 Wordpress 博客部署

TiFlash 源码阅读(五) DeltaTree 存储引擎设计及实现分析 - Part 2

TiDB 社区干货传送门

专访 | 软通动力高级副总裁秦张波:开源驱动创新,推动操作系统产业生态建设

kk-OSC

开放原子全球开源峰会

详细讲解https证书openssl公钥私钥以及ssh公钥私钥的生成以及使用

Geek_6516e4

签约计划第三季

我和 TiDB 的故事 | 缘份在,那就终是能相遇的

TiDB 社区干货传送门

人物访谈 社区活动

Java 7的并行支持:Fork/Join_Java_R.J. Lorimer_InfoQ精选文章