再现理想 发表于 2015-1-18 11:34:36

JAVA网页编程之JavaOne:Cliff Click议论可伸缩、非堵塞的编码体例仓酷云

不得不提一下的是:.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年代初开发。

小魔女 发表于 2015-1-21 10:27:17

应用在电视机、电话、闹钟、烤面包机等家用电器的控制和通信。由于这些智能化家电的市场需求没有预期的高,Sun公司放弃了该项计划。随着1990年代互联网的发展

兰色精灵 发表于 2015-1-30 15:02:45

是一种为 Internet发展的计算机语言

山那边是海 发表于 2015-2-6 13:41:19

是一种语言,用以产生「小应用程序(Applet(s))

愤怒的大鸟 发表于 2015-2-16 07:27:08

你可以去承接一些项目做了,一开始可能有些困难,可是你有技术积累,又考虑周全,接下项目来可以迅速作完,相信大家以后都会来找你的,所以Money就哗啦啦的。。。。。。

简单生活 发表于 2015-2-28 18:43:46

Java 编程语言的风格十分接近C、C++语言。

灵魂腐蚀 发表于 2015-3-10 04:06:32

那么我书也看了,程序也做了,别人问我的问题我都能解决了,是不是就成为高手了呢?当然没那么简单,这只是万里长征走完了第一步。不信?那你出去接一个项目,你知道怎么下手吗,你知道怎么设计吗,你知道怎么组织人员进行开发吗?你现在脑子里除了一些散乱的代码之外,可能再没有别的东西了吧!

透明 发表于 2015-3-11 03:51:33

吧,现在很流行的Structs就是它的一种实现方式,不过Structs用起来实在是很繁,我们只要学习其精髓即可,我们完全可以设计自己的MVC结构。然后你再研究一下软件Refactoring (重构)和极限XP编程,相信你又会上一个台阶。 做完这些,你不如整理一下你的Java代码,把那些经典的程序和常见的应用整理出来,再精心打造一番,提高其重用性和可扩展性。你再找几个志同道合的朋友成立一个工作室吧

柔情似水 发表于 2015-3-16 03:45:20

我大二,Java也只学了一年,觉得还是看thinking in java好,有能力的话看英文原版(中文版翻的不怎么好),还能提高英文文档阅读能力。

飘灵儿 发表于 2015-3-20 12:27:36

当然你也可以参加一些开源项目,一方面可以提高自己,另一方面也是为中国软件事业做贡献嘛!开发者在互联网上用CVS合作开发,用QQ,MSN,E-mail讨论联系,天南海北的程序员分散在各地却同时开发同一个软件,是不是很有意思呢?

蒙在股里 发表于 2015-3-27 21:59:24

Java是一种计算机编程语言,拥有跨平台、面向对java

冷月葬花魂 发表于 2015-4-4 03:49:25

是一种简化的C++语言 是一种安全的语言,具有阻绝计算机病毒传输的功能

小妖女 发表于 2015-4-11 21:02:06

你就该学一学Servlet了。Servlet就是服务器端小程序,他负责生成发送给客户端的HTML文件。JSP在执行时,也是先转换成Servlet再运行的。虽说JSP理论上可以完全取代Servlet,这也是SUN推出JSP的本意,可是Servlet用来控制流程跳转还是挺方便的,也令程序更清晰。接下来你应该学习一下Javabean了,可能你早就看不管JSP在HTML中嵌Java代码的混乱方式了,这种方式跟ASP又有什么区别呢?

小女巫 发表于 2015-4-12 20:07:41

Sun公司看见Oak在互联网上应用的前景,于是改造了Oak,于1995年5月以Java的名称正式发布。Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。

活着的死人 发表于 2015-4-18 03:16:14

一般学编程语言都是从C语开始学的,我也不例外,但还是可能不学过程语言而直接学面向对象语言的,你是刚接触语言,还是从C开始学比较好,基础会很深点,如果你直接学习JAVA也能上手,一般大家在学语言的时候都记一些语言的关键词,常有的包和接口等。再去做逻辑代码的编写,以后的学习过程都是从逻辑代码编写中提升的,所以这方面都是经验积累的。你要开始学习就从

飘飘悠悠 发表于 2015-4-20 06:17:34

你可以去承接一些项目做了,一开始可能有些困难,可是你有技术积累,又考虑周全,接下项目来可以迅速作完,相信大家以后都会来找你的,所以Money就哗啦啦的。。。。。。

分手快乐 发表于 2015-4-25 03:37:02

你快去找一份Java的编程工作来做吧(如果是在校学生可以去做兼职啊),在实践中提高自己,那才是最快的。不过你得祈祷在公司里碰到一个高手,而且他 还愿意不厌其烦地教你,这样好象有点难哦!还有一个办法就是读开放源码的程序了。我们知道开放源码大都出自高手,他们设计合理,考虑周到,再加上有广大的程序员参与,代码的价值自然是字字珠叽,铿锵有力(对不起,偶最近《金装四大才子》看多了)。

爱飞 发表于 2015-6-6 19:40:14

是一种使网页(Web Page)产生生动活泼画面的语言

若天明 发表于 2015-6-19 17:03:37

Pet Store.(宠物店)是SUN公司为了演示其J2EE编程规范而推出的开放源码的程序,应该很具有权威性,想学J2EE和EJB的朋友不要 错过了。

再见西城 发表于 2015-6-29 03:40:00

Pet Store.(宠物店)是SUN公司为了演示其J2EE编程规范而推出的开放源码的程序,应该很具有权威性,想学J2EE和EJB的朋友不要 错过了。
页: [1]
查看完整版本: JAVA网页编程之JavaOne:Cliff Click议论可伸缩、非堵塞的编码体例仓酷云