Data+AI时代,如何打造下一代数智平台? 了解详情
写点什么

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

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

关注

评论

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

OpenMLDB Airflow Connector:让 MLOps 工作流更自由

第四范式开发者社区

人工智能 机器学习 数据库 开源 特征

倒数三天 | WAIC 滴水湖 AI 开发者创新论坛:当数据库遇上 AI 来啦!

第四范式开发者社区

人工智能 机器学习 数据库 开源 特征

【Meetup 明天见】OpenMLDB+37手游:一键查收特征计算场景案例及进阶使用攻略

第四范式开发者社区

人工智能 数据库 开源 时序数据库

打造友邻式多元生态,支撑工商银行、平安科技、中国人寿财险、杭州银行的创新实践

TiDB 社区干货传送门

数据库前沿趋势

谈谈产品如何定位

产品海豚湾

产品经理 产品定位 商业洞察 10月月更 SaaS 产品

究竟都是谁在使用?OpenMLDB 落地案例大起底

第四范式开发者社区

人工智能 数据库 开源 时序数据库 特征

贡献者任务第五期,炫酷登场!

第四范式开发者社区

人工智能 机器学习 数据库 开源 特征

OpenMLDB 进阶使用攻略和高级特性介绍

第四范式开发者社区

人工智能 机器学习 数据库 开源 特征

OpenMLDB + OneFlow: 手把手教你快速链接特征工程到模型训练

第四范式开发者社区

人工智能 机器学习 数据库 开源 特征

深度解密 OpenMLDB 毫秒级实时在线特征计算引擎

第四范式开发者社区

人工智能 机器学习 数据库 开源 特征

拼搏一周!刷了1000道Java高频面试题喜提阿里offer,定级P7

Geek_0c76c3

Java 数据库 开源 程序员 架构

决策 AI:以高效落地为目标的工程技术

第四范式开发者社区

机器学习 数据库 时序数据库 特征

OpenMLDB v0.6.0 发布 | 便捷性、可用性大幅提升!

第四范式开发者社区

人工智能 机器学习 数据库 开源 特征

OpenMLDB+Byzer,SQL 也能玩转机器学习全流程

第四范式开发者社区

机器学习 数据库 开源 时序数据库 特征

专访 | 赵沁雪:参与开源,不是一个人的战斗

第四范式开发者社区

人工智能 机器学习 数据库 开源 特征

OpenMLDB 开源一周年,感恩遇见

第四范式开发者社区

人工智能 机器学习 数据库 开源 特征

如何选择架构中的底层工具?OpenMLDB 在 Akulaku 数据驱动中的应用实践给你答案

第四范式开发者社区

人工智能 机器学习 数据库 开源 特征

直冲云霄,阿里大牛耗时49天整理12W字面试手册,押题准确率直冲95%

Geek_0c76c3

Java 数据库 开源 程序员 开发

OpenMLDB Meetup No.5 会议纪要

第四范式开发者社区

人工智能 机器学习 数据库 开源 特征

首届第四范式 Tech Day 回顾

第四范式开发者社区

人工智能 机器学习 数据库 开源 特征

AICon 2022 | 来杭州和 OpenMLDB 见面吧

第四范式开发者社区

人工智能 机器学习 数据库 时序数据库 特征

OpenMLDB Meetup No.6 回顾 | OpenMLDB+37手游:一键查收特征计算场景案例及进阶使用攻略

第四范式开发者社区

人工智能 机器学习 数据库 开源 特征

直播预告 | 第四范式Tech Day火热来袭,OpenMLDB 与你 8月11日线上见

第四范式开发者社区

人工智能 机器学习 数据库 开源 特征

TiDB 数据冷热存储分离测试

TiDB 社区干货传送门

实践案例 管理与运维 新版本/特性解读 数据库架构设计

刘奇:能否掌控复杂性,决定着分布式数据库的生死存亡

TiDB 社区干货传送门

数据库前沿趋势

开源星「001号」落地 OpenMLDB,欢迎登陆赢神秘大礼包!

第四范式开发者社区

人工智能 机器学习 数据库 开源 特征

Redis--Redis集群、缓存穿透、缓存击穿、缓存雪崩

Java学术趴

10月月更

秋招Java面试大纲:Java+并发+spring+数据库+Redis+JVM+Netty等

Geek_0c76c3

Java 数据库 开源 程序员 开发

活动紧急插播 | QCon 全球软件开发者大会早班车连线分享

第四范式开发者社区

人工智能 数据库 开源 时序数据库 特征

专访 | 许伟 ——贡献榜 Top4 也只是“开源小白”

第四范式开发者社区

人工智能 机器学习 数据库 开源 特征

TiKV缩容下线异常处理的三板斧

TiDB 社区干货传送门

实践案例 管理与运维 故障排查/诊断 扩/缩容

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