首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 第二书店 程序员
您的位置:Java->JavaOne:Cliff Click谈论可伸缩、非阻塞的编码方式

JavaOne:Cliff Click谈论可伸缩、非阻塞的编码方式2008-06-17 来自:villa123  [收藏到我的网摘]

你的并发代码能有多快?早在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就会重试。

推荐人评论

你的并发代码能有多快?早在1967年,Gene Amdahl就指出了影响这一问题的主要限制。程序中只有一部分可以完全并行地运行,也只有这部分才能直接在拥有越来越多处理器内核的机器上获得良好的伸 缩性。程序的剩余部分则只能顺序执行。

用户评论

正在载入评论列表...

是谁推荐了此篇文章

专家头像
个人blog发送信息
推荐的其他文章

热点新闻

热点评论

    精彩视频

    精彩专题

    资源下载

    网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|版权声明|问题报告

    北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号

    世纪乐知(北京)网络技术有限公司 提供技术支持

    Copyright ? 2000-2008, CSDN.NET, All Rights Reserved

    GongshangLogo