Java 理论与实践: 应用 fork-join 框架

 
Java™ 7 的 java.util.concurrent 包的新增功能之一是一个 fork-join 风格的并行分解框架。fork-join 概念提供了一种分解多个算法的自然机制,可以有效地应用硬件并行性。

硬件趋势驱动编程语言

语言、库和框架形成了我们编写程序的方式。Alonzo Church 早在 1934 年就曾表明,所有已知的计算性框架对于它们所能表示的程序集都是等价的,程序员实际编写的程序集是由特定语言形成的,而编程模型(由语言、库和框架驱动)可以简化这些语言的表达。

另一方面,一个时代的主流硬件平台形成了我们创建语言、库和框架的方法。Java 语言从一开始就能够支持线程和并发性;该语言包括像 synchronizedvolatile 这样的同步原语,而类库包含像 Thread 这样的类。然而,1995 年流行的并发原语反映了当时的硬件现状:大多数商用系统根本没有提供并行性,甚至最昂贵的系统也只提供了有限的并行性。当时,线程主要用来表示异步,而不是并发,而这些机制已足够满足当时的需求了。

随着多处理器系统价格降低,更多的应用程序需要使用这些系统提供的硬件并行性。而且程序员们发现,使用 Java 语言提供的低级原语和类库编写并发程序非常困难且容易出错。在 Java 5 中,java.util.concurrent 包被添加到 Java 平台,它提供了一组可用于构建并发应用程序的组件:并发集合、队列、信号量、锁存器(latch)、线程池等等。这些机制非常适合用于粗任务粒度的程序;应用程序只需对工作进行划分,使并发任务的数量不会持续少于可用的处理器数量。通过将对单个请求的处理用作 Web 服务器、邮件服务器或数据库服务器的工作单元,应用程序通常能满足这种需求,因此这些机制能够确保充分利用并行硬件。

技术继续发展,硬件的趋势非常清晰;Moore 定律表明不会出现更高的时钟频率,但是每个芯片上会集成更多的内核。很容易想象让十几个处理器繁忙地处理一个粗粒度的任务范围,比如一个用户请求,但是这项技术不会扩大到数千个处理器 — 在很短一段时间内流量可能会呈指数级增长,但最终硬件趋势将会占上风。当跨入多内核时代时,我们需要找到更细粒度的并行性,否则将面临处理器处于空闲的风险,即使还有许多工作需要处理。如果希望跟上技术发展的脚步,软件平台也必须配合主流硬件平台的转变。最终,Java 7 将会包含一种框架,用于表示某种更细粒度并行算法的类:fork-join 框架

本文转自:IBM developerWorks 中国

请点击此处查看全文

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值