|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
不得不提一下的是:.net网页编程是看到java红,而开发出来的工具。你的并发代码能有多快?早在1967年,GeneAmdahl就指出了影响这一成绩的次要限定。程序中只要一部分能够完整并行地运转,也只要这部分才干间接在具有愈来愈多处置器内核的呆板上取得优秀的伸缩性。程序的残剩部分则只能按次实行。Amdahl法例夸大的次要成绩是锁争取,这个成绩会跟着处置器内核数的增添而渐渐好转。多半共享存储器硬件的年夜型CPU把持体系都撑持十分疾速的并发读操纵,但会限速于“1-cache-miss-per-write”大概“1-memory-bus-update-per-write”,因而制止一切CPU对统一地位举行写操纵长短常关头的。即便使用读写锁,体系伸缩度也很难超出50-100个CPU。多核处置器是一个正在开展的家产趋向,几近全体硬件供给商都在尽心尽力地朝着多核的偏向勉力。Azul行将开辟出可投进利用的768核的处置器,Sun的Rock具有64核,就连基于x86的商用硬件也在增添核的数目。因而锁争取的成绩将成为程序员编写高功能代码的拦路虎。AzulSystems的资深工程师CliffClick博士在往年的JavaOne年夜会长进行了演讲(下载幻灯片),先容了一些能够匡助我们用Java编写出可伸缩、非堵塞代码的手艺。整体来讲,他先容的办法完成了一个非堵塞算法,这个算法能够包管中断某个特定线程其实不会招致全体历程的中断。
Click的演讲次要包含上面几部分:
- 一个年夜型的、疾速的包括一切数据的数组,该数组同意疾速的并行数据读取,也同意并行的、递增的并发复制。
- 数组元素的原子更新(必要利用java.util.concurrent.Atomic.*)。在Azul/Sparc/x86处置器上,原子更新将利用“对照并互换(CAS)”原语完成,而在IBM的平台上,将利用“链接加载/前提存储(LoadLinked/Store-conditional,LL/SC)”原语。
- 从对每一个数组元素的原子更新与逻辑上的复制操纵中笼统出来的无限形态机(FSM)。FSM撑持数组的巨细调剂,并用于把持写操纵。
有了这些基础观点和元素后,Click接着将大批锁自在的FSM步骤(好比每一个CAS步进)组分解一个非堵塞算法。每一个CAS的乐成都是部分乐成,同时一个CAS的失利则意味着另外一个CAS会持续。假如一个CAS乐成,形态机就会行进,同时失利的CAS就会重试。
Click已完成了两个示例,分离是位向量(BitVector)和哈希表(HashTable),它们的源代码可以在SourceForge上取得。同时Click正在开辟第三个示例(FIFO行列)。让我们以哈希表为例来深切研讨一些细节,哈希表是一个由键值对组成的数组,个中Key在偶数的地位上、Value在奇数的地位上。每一个元素都自力地举行CAS操纵,可是形态时机同时超过两个元素,乃至在复制阶段包含来自两个数组的分歧元素。Click完成的哈希表撑持并发拔出、移除测试(removetest)、重置巨细,同时该完成还经由过程了ConcurrentHashMap的Java兼容性测试集(JCK)。在Azul的768核的硬件体系上,该哈希表在每秒凌驾十亿次读操纵、同时每秒凌驾万万次更新操纵时,能够取得线性的伸缩性。
InfoQ与Click博士还谈到了他今朝研讨事情的一些背景。在此次JavaOne的演讲时代,他特地夸大了几个用Java编写哈希表时存在的成绩,因此在被问到Java做如许的事情有多符合时,他回覆说:“现实上长短常符合的……它十分正确地使用了存储模子(而且完成得十分好)。可是它在细粒度把持上存在不敷,这些不敷只带来很小的功能消耗,我能够疏忽它们。缺少细粒度把持(也就是间接ASM存取)大概会在OS计划大概设备驱动程序中带来成绩,可是对数据布局不会发生影响。”
InfoQ还问他倡议人们什么时候利用他完成的数据布局。Click的回覆是,在那些“久经磨练”的完成变得太慢、难以利用之时:“假如独自的数据布局被剧烈争取;并且你已实验过java.util.concurrent.ConcurrentHashMap等完成了。那末我的完成在没有负载的情形下其实不会明显提拔功能(也就没有甚么来由利用它),但鄙人面的情形下,却完整分歧了:
-当有凌驾32个CPU同时争取时,大概
-写操纵占读写操纵总数的比例很高时。
这类变化会带来很年夜的变更,因而,利用它之前要先辈行测试。” 今朝,环绕Java中的并发有良多举措,Click博士的研讨事情所办理的成绩与fork/join框架基础相似,后者正被思索到场Java7。只管Click自己不是专家组的成员,但他常常向专家组供应匡助。
检察英文原文:JavaOne:CliffClickonaScalableNon-BlockingCodingStyle
来自:http://www.infoq.com/cn/news/2008/06/click_non_blocking
JAVA是一种可以撰写跨平台应用软件的面向对象的程序设计语言,由升阳(SunMicrosystems)公司的詹姆斯·高斯林(JamesGosling)等人于1990年代初开发。 |
|