JDK7的并行计算功能升级

09-11-16 banq
Phasers

比CyclicBarrier更灵活,CyclicBarrier让所有线程在某个同步点原地踏步绕圈等待,可以控制多线程同时暂停等待,Phaser增强了CyclicBarrier几个特点:

允许计数超过时间变化

Phases能够计数并且线程能够知道这个计数值。

CyclicBarrier只允许一个同步action被注册, 而Phaser允许更加灵活动态的多个Action

终止 – 显式支持中断终止phase

多层phaser树

据说Phaser将是Java日常并行编程最重要的常用语法。

TransferQueue

比SynchronousQueue 性能在不公平模式unfair提高3倍,是公平faire模式14倍。因为SynchronousQueue用在很多核心普用库ThreadPoolExecutor中,所以Java 7提供的TransferQueue将大大提高所有使用ThreadPoolExecutor的程序性能。特别的是:当有新条目要被加入到队列中时,调用transfer将确保队列中所有条目被处理。Doug Lea成为capability-wise 容量智能化。

SynchronousQueue是使用两个队列来实现Producer和Consumer, 用一个锁保护这两个队列而LinkedTransferQueue使用非堵塞操作,避免序列化瓶颈。

Fork-join

提供了分而治之的并行计算模型,提供了大型数据集并行处理的方式。许多排序 过滤 搜索算法都能使用这个模型实现,有点类似小小Hadoop意思。

Fork-join已经成为其他并行语言 Scala, Clojure, Fortress, and Groovy (GPars) 重要语法。并且充分吸收了他们的优势。

其他Java 7并行计算有特点功能API: Fences ConcurrentReferenceHashMap Concurrent LRU –ParallelArray

原文:JSR 166 Concurrency Updates Hit JDK 7

Java 7 TransferQueue

1
bosslee
2009-11-17 08:51
看来DomainEvent的异步调用将会是未来了开发趋势

xmuzyu
2009-11-17 22:29
领域模型+缓存+异步使得并发处理和事务完整性分开,异步之前解决了并发问题,这个并发就靠JAVA语言本身的锁的机制,并且内存并发还可以借助目前多核和多CPU实现真正的并行处理,这样显著的提高了系统的可用性和性能。所以采用领域模型的方式,软件工程师要学习的是面向对象的分析和设计,以及并发编程,而不是像以前一样,以为能写出复杂的SQL语句就很牛一样。

xmuzyu
2009-11-17 22:32
推荐一篇介绍fork-join框架的文章。

Learn how to exploit fine-grained parallelism using the fork-join framework coming in Java 7

banq
2009-11-25 09:34
New language features in Java 7

Java 7的新语言特性:

1.简化了Collection编写

List<String> list = ["item"];

Map<String, Integer> map = {"key" : 1};

2.在try中可以写代码:

try (BufferedReader br = new BufferedReader(new FileReader(path)) {

return br.readLine();

}

...

虽然JDK 7 Milestone 5 最近发布了, 但是真正JDK 7 final release版本可能要推迟到六个月后2010年9月发布。

JDK 7 Milestone 5 Includes Concurrency and Performance Updates, But Is Not Feature Complete

[该贴被banq于2009-11-25 11:26修改过]

netcasewqs
2010-04-12 14:26
很期待JDK7的新功能

猜你喜欢