2天时间,聊今年最热的 Agent、上下文工程、AI 产品创新等话题。2025 年最后一场~ 了解详情
写点什么

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:063778
用户头像

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

关注

评论

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

cdr2023最新试用版下载CorelRAW2023

茶色酒

CorelRAW2023

边旅游边赚钱!数字游民离不开远程控制软件

RayLink远程工具

远程控制软件 远程办公软件 远控软件 RayLink 远程控制连接

真相了!GitHub不光能学代码,还有这些...

程序员小毕

GitHub 程序员 架构 面试 程序人生

低代码平台中的“模型驱动”与“表单驱动”有何区别?

优秀

领域驱动模型DDD 中台架构 表单设计 低代码平台

深度解读隐语密态计算设备SPU

隐语SecretFlow

机器学习 开源 隐私计算 开源框架 隐语

大数据培训的就业前景怎么样

小谷哥

高标准企业级安全性,华为云会议为线上沟通保驾护航

秃头也爱科技

中国银河证券:缺少DevOps,企业数字化转型就是带着脚镣跳舞

嘉为蓝鲸

DevOps 数字化转型 金融 证券

华为云弹性负载均衡ELB,如何保障服务器不瘫痪?

清欢科技

netty系列之:在netty中使用proxy protocol

程序那些事

Java 架构 Netty 程序那些事

数字化转型,要把功夫炼到任督二脉

脑极体

Meetup预告:SeaTunnel在天翼云数据集成平台的探索实践

Apache SeaTunnel

大数据 技术分享 数据同步 数据集成 Apache SeaTunnel

唯一获奖容器厂商!灵雀云斩获2022信创“大比武”通信赛道大奖

York

容器 云原生 数字化转型 国产化 信创云

1000道最新高频Java面试题,覆盖25个技术栈(多线程、JVM、高并发、spring、微服务、kafka,redis、分布式)从底层原理到架构!

程序知音

Java Java 面试 大厂面试 java架构 后端技术

出海有“云”!华为云全球加速助力跨国企业提升网络体验

科技怪授

在 Spring 生态中玩转 RocketMQ

Apache RocketMQ

RocketMQ spring could

华为云智能云接入ICA,助力企业轻松上云

科技怪授

Doris Summit 2022 正式启航,演讲议题开启征集

SelectDB

开源 Doris 峰会 summit SelectDB

7分钟带你细致解析4个Java算法必刷题

好程序员IT教育

Java

深入浅出学习透析Nginx服务器的基本原理和配置指南「Https安全控制篇」

码界西柚

nginx https ssl 11月日更 SSL/TLS 协议

前端培训后的学习方法有哪些

小谷哥

前端培训班学习真的靠谱吗?

小谷哥

零基础转行前端培训学习好吗?

小谷哥

Unload data from Databend | 新手篇(4)

Databend

databend

“PKS+生态(智方舟)加速营”圆满结束,九科信息与中电智方舟达成战略合作

九科Ninetech

Serverless 的前世今生

阿里巴巴云原生

阿里云 Serverless 云原生

前端培训入行35岁程序员有什么奔头

小谷哥

从保险系统升级谈微服务架构的弊端

勇士

外包 微服务 系统架构 保险 运维开发

打造用户喜爱的产品,离不开需求助推器|影响地图Impact Mapping

Uncle Leo

敏捷开发 软件工程 设计思维 用户故事地图 影响地图

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