Java Fork/Join框架
原文链接:A Java Fork/Join Framework(PDF) – Doug Lea
译序
Doug Lea 大神关于Java 7
引入的他写的Fork/Join
框架的论文。
响应式编程(Reactive Programming
/ RP
)作为一种范式在整个业界正在逐步受到认可和落地,是对过往系统的业务需求理解梳理之后对系统技术设计/架构模式的提升总结。Java
作为一个成熟平台,对于趋势一向有些稳健的接纳和跟进能力,有着令人惊叹的生命活力:
Java 7
提供了ForkJoinPool
,支持了Java 8
提供的Stream
。- 另外
Java 8
还提供了Lamda
(有效地表达和使用RP
需要FP
的语言构件和理念)。 - 有了前面的这些稳健但不失时机的准备,在
Java 9
中提供了面向RP
的官方Flow API
,实际上是直接把Reactive Streams
的接口加在Java
标准库中,即Reactive Streams
规范转正了,Reactive Streams
是RP
的基础核心组件。Flow API
标志着RP
由集市式的自由探索阶段 向 教堂式的统一使用的转变。
通过上面这些说明,可以看到ForkJoinPool
的基础重要性。
对了,另外提一下Java 9
的Flow API
的@author
也是 Doug Lee 哦~
PS:基于Alex/萧欢 翻译、方腾飞 校对的译文稿:Java Fork Join 框架,补译『结论』之后3节,调整了格式和一些用词,整理成完整的译文。译文源码在GitHub的这个仓库中,可以提交Issue/Fork后提交代码来建议/指正。
0. 摘要
这篇论文描述了Fork/Join
框架的设计、实现以及性能,这个框架通过(递归的)把问题划分为子任务,然后并行的执行这些子任务,等所有的子任务都结束的时候,再合并最终结果的这种方式来支持并行计算编程。总体的设计参考了为Cilk
设计的work-stealing
框架。就设计层面来说主要是围绕如何高效的去构建和管理任务队列以及工作线程来展开的。性能测试的数据显示良好的并行计算程序将会提升大部分应用,同时也暗示了一些潜在的可以提升的空间。