聂永的博客

记录工作/学习的点点滴滴。

Fork/Join模式(JSR166y)手记之JVAA6搭建环境,开始学习

Doug Lea的jsr166y,主要体现在Fork/Join模式,分而治之,然后合并结果,这么一种编程模式。相比JDK 1.6内置的JUC并发框架,更加细粒度。虽然已经内置JDK 1.7中,但本文环境基于JDK 1.6,因此在相关包的引用方面,差异在于包的路径。
有关Fork/Join的一些摘抄:
fork/join框架是一个“多核友好的、轻量级并行框架 ”,它支持并行编程风格,将问题递归拆分成多个更小片断,以并行和调配的方式解决。Fork-join融合了分而治之技术;获取问题后,递归地将它分成多个子问题,直到每个子问题都足够小,以至于可以高效地串行地解决它们。递归的过程将会把问题分成两个或者多个子问题,然后把这些问题放入队列中等待处理(fork步骤),接下来等待所有子问题的结果(join步骤),把多个结果合并到一起。
Doug Lea描述了fork/join框架最可能的使用场景和采用过程:
总之,我期望其使用曲线与其他并发工具雷同。最初,只有较少真正需要的人使用它们,但最终很难找到不依赖于它们的程序,它们常常深埋在底层基础架构组件中。因此,表面语法支持可能并不是那么重要——类库/组件开发者越是想合并它们,其用法越是表现的笨拙。
理想的情况下,有几个使用层次:
1. “并行做事”层次,语言或工具翻译成并行代码,同时检查安全性/活跃性。这仍部分处于研究领域。

2. 安排集合的并行操作。——map、reduce、apply等等。那些想使用一次性操作特性操纵集合的程序员们,可以使用这些特性来提高常用处理类型的速度。(这是ListTasks、ArrayTasks等等层次)

3. 手工生效forkjoin以解决特定问题。这是我正在全力投入的层次,以确保我们可能使用工作窃取框架来支持范围广泛的并行算法。(当前一些怪模怪样的和缺乏解释的方法,如isQuiescent是为这种高级用法设计的。多数程序只使用“fork”和“join”,但当你需要其他这些方法时,它们也被提供了。)

4. 扩展框架以创建新类型的ForkJoinTasks等等。例如,那些需要事务的操作。只有很少量的人(例如,或许是Fortress运行时类库开发者)需要这么做,但是需要有足够的基础扩展钩子来才能做好。
本文开始学习,按照心得步骤一步一步进行学习。即将开始。
Doug Lea有关JUC的官网地址:http://gee.cs.oswego.edu/dl/concurrency-interest/
  1. 下载原始代码(http://gee.cs.oswego.edu/cgi-bin/viewcvs.cgi/cvs-root.tar.gz?parent=1&view=tar)到本地
  2. 把cvs-root.tar.gz解压到本地某个目录,假设解压地址是d:\workspace\jsr166
  3. 进入CMD命令行,切换到d:\workspace\jsr166目录下
  4. 运行ANT命令:ant jsr166ydist (没设置ANT环境,自行处理)
  5. 在dist目录生成jsr166y.jar文件、docs目录
在相关项目中加入jsr166y.jar依赖即可。
必备条件:JDK 1.6
机器配置:
操作系统 Windows XP 专业版 32位 SP3
处理器 英特尔 Pentium(奔腾) P6200 @ 2.13GHz
内存 4 GB ( 金士顿 DDR3 1333MHz / 三星 DDR3 1333MHz )
参考资料:
  1. Java 7的并行支持:Fork/Join
  2. Java SE 7的新并发特性
  3. Adam Messinger谈Java 7与8

posted on 2012-02-03 23:01 nieyong 阅读(2749) 评论(0)  编辑  收藏 所属分类: Java


只有注册用户登录后才能发表评论。


网站导航:
 

公告

所有文章皆为原创,若转载请标明出处,谢谢~

新浪微博,欢迎关注:

导航

<2012年2月>
2930311234
567891011
12131415161718
19202122232425
26272829123
45678910

统计

常用链接

留言簿(58)

随笔分类(130)

随笔档案(151)

个人收藏

最新随笔

搜索

最新评论

阅读排行榜

评论排行榜