专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »Java教程 » 伸缩门:JavaOne:Cliff Click谈论可伸缩、非阻塞的编码方式 »正文

伸缩门:JavaOne:Cliff Click谈论可伸缩、非阻塞的编码方式

来源: 发布时间:星期一, 2008年6月16日 浏览:286次 评论:0
你的并发代码能有多快?早在1967年,Gene Amdahl就指出了影响这一问题的主要限制。程序中只有一部分可以完全并行地运行,也只有这部分才能直接在拥有越来越多处理器内核的机器上获得良好的伸 缩性。程序的剩余部分则只能顺序执行。Amdahl法则强调的主要问题是锁争夺,这个问题会随着处理器内核数的增加而逐渐恶化。多数共享存储器硬件的大型 CPU控制系统都支持非常快速的并发读操作,但会限速于“1-cache-miss-per-write”或者“1-memory-bus- update-per-write”,因此避免所有CPU对同一位置进行写操作是非常关键的。即使利用读写锁,系统伸缩度也很难超越50-100个 CPU。多核处理器是一个正在发展的产业趋势,几乎全部硬件供应商都在不遗余力地朝着多核的方向努力。Azul即将开发出可投入使用的768核的处理 器,Sun的Rock拥有64核,就连基于x86的商用硬件也在增加核的数量。因此锁争夺的问题将成为程序员编写高性能代码的拦路虎。
Azul Systems的资深工程师Cliff Click博士在今年的JavaOne大会上进行了演讲(下载幻灯片),介绍了一些可以帮助我们用Java编写出可伸缩、非阻塞代码的技术。总体来说,他介绍的方法实现了一个非阻塞算法,这个算法可以保证停止某个特定线程并不会导致整体进程的停止。

Click的演讲主要包括下面几部分:

一个大型的、快速的包含所有数据的数组,该数组允许快速的并行数据读取,也允许并行的、递增的并发复制。
数组元素的原子更新(需要使用java.util.concurrent.Atomic.*)。在Azul/Sparc/x86处理器上,原子更新将使用“比较并交换(CAS)”原语实现,而在IBM的平台上,将使用“链接加载/条件存储(Load Linked/Store-conditional,LL/SC)”原语。
从对每个数组元素的原子更新与逻辑上的复制操作中抽象出来的有限状态机(FSM)。FSM支持数组的大小调整,并用于控制写操作。
有了这些基本概念和元素后,Click接着将大量锁自由的FSM步骤(比如每个CAS步进)组合成一个非阻塞算法。每个CAS的成功都是局部成功,同时一个CAS的失败则意味着另一个CAS会继续。如果一个CAS成功,状态机就会前进,同时失败的CAS就会重试。

相关文章

读者评论

  • 共0条 分0页

发表评论

  • 昵称:
  • 内容: