对Web应用来说,扩展能力很重要,随着用户群和工作量的增加,处理器在增加,它应该能够进行扩展。对于Java应用来说,扩展更复杂,不只是简单的购买和安装20个新的处理器就可以的。然而,Java平台能够也确实支持应用扩展,通过外围设备语言,例如Scala、Clojure和Groovy。利用JAVA编程语言,开发者很难使JAVA应用进行线性扩展。
除去最初的那些处理器外,每当系统中新添加一个处理器后,你会发现它不能接近或等同于总体性能。这个问题在于,Java实现并发性的编写使用的是线程和锁,所以随着处理器数量的增多,JAVA程序会花费大量的时间在锁上,即使是没有底层数据争用问题。这是事实,随着使用的处……
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】
微信公众号
TechTarget
官方微博
TechTarget中国
对Web应用来说,扩展能力很重要,随着用户群和工作量的增加,处理器在增加,它应该能够进行扩展。对于Java应用来说,扩展更复杂,不只是简单的购买和安装20个新的处理器就可以的。然而,Java平台能够也确实支持应用扩展,通过外围设备语言,例如Scala、Clojure和Groovy。利用JAVA编程语言,开发者很难使JAVA应用进行线性扩展。除去最初的那些处理器外,每当系统中新添加一个处理器后,你会发现它不能接近或等同于总体性能。这个问题在于,Java实现并发性的编写使用的是线程和锁,所以随着处理器数量的增多,JAVA程序会花费大量的时间在锁上,即使是没有底层数据争用问题。这是事实,随着使用的处理器的增多,开始扩展程序,就产生了不可避免的瓶颈。
JAVA扩展悖论
这是一个悖论。JAVA平台可以无限扩展,或者至少限制了一个现代机器能把多少个处理器塞进服务器里。你知道,扩展是最受JAVA程序语言本身的限制,但从整体来看这不是JAVA平台的局限性。事实上,当编写的程序能很好的利用底层JAVA平台时,线性扩展就不再是问题。我们都知道,现阶段编写的大多数WEB应用都能很好地利用JAVA平台的无限扩展性。你怎样看?嗯,现在的问题是使用除JAVA外的语言。
外围编程语言来解救
JAVA的扩展问题已经不再新鲜。事实上,为了处理这个问题已经做了很多工作,其中最成功的项目中有两种编程语言:Scala和Clojure。
使用像映射和消息传递之类的概念,会让人想起旧的,高效的并行编程语言Erlang和Scala,它们正在寻找方法,以解决JAVA语言的问题线程和锁范式。此外,Scala 和Clojure都使用“不变的”方式管理状态数据。大家知道,使用JAVA应用可以改变对象容器的大量属性。正因为这些属性可以改变,所以访问这些属性就一定要锁定,这样数据才不会陷入矛盾状态。
有Scala和Clojure在手,数据有了不变的趋势。因为不变,所以不会被更改;因为不会被更改,所以就没有必要永久锁定数据。与其改变或编辑对象属性,如果一定要做更改的话,与其编辑,不如创建一个拥有新属性的全新的,不变的对象,加上一个时间戳,和一个可以表明这个新数据块的实时快照的等价物。
“不是改变对象的状态,那么不变是什么意思?比如一个银行帐户记录,你是拷贝状态,而不是创建一个新银行帐户记录。如果你有一个collection对象需要修改,通过修正它你得到了一个新的collection对象,而旧的对象仍然在那里。”James Strachan说,他FuseSource资深会员和Groovy编程语言的发明者。
有了高并发列表,你可以指出数列中的任一个特定阶段,而且你所指向的对象不会改变。它将永远是那个静态对象。但是未来的修改是有可能发生的,因为每当修改了对象,你就会得到一个较新版本的对象,有一个新的时间戳。你可以指向对象的任意版本,而且每一个版本都反映了列表那个时间的状态。Strachan把每一个对象比作是同一时间的一个快照。
“当你照着这种方式做的话,关于锁的问题就消失了,” Strachan说。“现在不用锁,不用信号,没有行为者,也没有任何奇怪的人员,读的行为都可以永久保存collection对象。我们都应该向不变努力,因为这样就可以不必为读出加锁了,只需要给写入加锁就可以了。”
通过把数据变成不变的,可能会给内存和数据管理带来压力,但却可以通过简单地给系统增加处理器来获得了巨大的,线性的性能。
Scala、Clojure和Groovy的互操作性
关于Scala、Clojure或Groovy的另外一件好事是,它们不仅能运行在JAVA平台下的JAVA虚拟机(JVM)上,也可以和一般的JAVA应用一起运行,甚至是和JAVA应用进行交互,与标准JAVA库链接,或者更甚者是允许程序编写JAVA可以访问的代码和库,这些都是源于Scala和Clojure源代码级别。其实,当前的标准JAVA应用所使用和访问的‘函数语言’都是由外围JVM语言编写的,并允许标准JAVA应用利用Scala和Groovy程序的好处,这时它最有意义。
事实上,JAVA编程语言本身并没有享受到兆、多核系统的好处,虽然这些变得越来越实惠,但这也并不意味着JAVA平台没有能力提供你所需的程序和扩展性。如果大规模的扩展是你需要的,你可以一直利用像Scala和Clojure这样的外围JVM语言,而且它也不需要你一头扎进去,不管别的。通过编写Groovy或Clojure来使用函数语言或链接现有的库,允许你在这一领域慢慢地进行测试,从而发现从这些语言中获得的哪种性能可以发送到你的程序中。
相关推荐
-
Scala社区赢得人心的五大技巧
随着十几年的发展,大型的、热情洋洋的Scala社区已经从一个外围语言转变成了一个有得的竞争者。尽管,它还在不断走向成熟,这就意味着随着它的进化,要经历一些成长的烦恼。
-
Scala十岁了:下一个十年最走向何方?
十年之前Michel Schinz宣布了Scala编程语言的第一个实现,Scala被描述为“一种平滑地集成了面向对象编程和函数式编程的语言”,下一个十年,Scala会走向何方呢?
-
专家坚称Java将是2014主流语言
当你参加会议、阅读书籍或在线将遇良才时,你不可避免地会遇到一些顽固的Java粉。但对这一古老的话题,没有人会比Adam Bien更热情了。
-
聪明的Java人员这么做:融入JavaScript
JavaScript开发和实施可以使用更多的工具及平台,因此很难决定该用哪一种工具及平台。接下来让我们一起看看过去一年中JavaScript领域中最受人关注的抉择。