Ruby性能大比拼:最新Great Shootout结果公布,二进制MRI速度减半

Ruby实现之间的竞争从未结束,尤其在性能上。一年以前,Antonio Cangiano启动了Great Ruby Shootout,比较了1.8.6、1.9.0、JRuby、Rubinius以及已经被废弃的Ruby.NET实现。

现在,Antonio发布了Great Ruby Shootout 2008,比较了1.8.6、1.9.1、JRuby、Rubinius、Ruby商业版、IronRuby,以及最新加入的MagLev。

一定要记得,对于基准测试,要持有怀疑态度,这一点在Antonio身上再次得到验证。Antonio发现了首次运行时的一些问题,并公布了修正后的版本,对一些结果进行了修正。他发现的问题之一,是关于Debian的包管理系统中的Ruby版本:

如果你通过apt-get方式来安装Ruby的话,我得给你一个大大的警告。如果从源代码编译的话,你会发现速度翻倍了,这是通 过这些测试检测出来的。我以为只是10~20%的提升,结果却是100%。其原因在于,打包好的Ruby使用了--enable-pthreads进行编 译,这样会有“共享库 vs 静态库”的问题。

Prashant Srinivasan先前已经提及过--enable-pthread的问题,并解释了它会拖慢系统的原因。

基准测试还显示出,在Windows上的Ruby 1.8.x运行速度仅有(从源代码编译的)在Linux上运行Ruby 1.8.7速度的一半。

目前可用的Ruby实现中,最快的要数Ruby 1.9.1了,而JRuby 1.1.6RC1则紧随其后。从基准测试中可以看出,JRuby似乎是目前执行Ruby 1.8.x代码的最快方式了。

而其他的Ruby实现,如Rubinius和IronRuby,依然比MRI慢很多。基于Ruby 1.9的MacRuby 0.3也稍稍慢了些,然而似乎它还没有为生产做好准备,生产版本将会是下一个发布版(MacRuby 0.4预计将会在年底发布)。

MagLev的结果也兑现了他们的承诺,很多基准测试都要比MRI快很多,但还有一些比较慢。长远来看,MagLev还是一个相当年轻的项目,今年年初才蹒跚起步。

最后要说明重要的一点。Great Ruby Shootout所使用的基准测试的代码是由众多小测试构成的,用于测试Ruby和Ruby运行时的各个独立的特性。就此,Antonio解释说:

很多人对受测VM能为Ruby on Rails开发栈带来的改进更感兴趣。不要假定如果VM A比VM B快三倍,那么Rails在每分钟处理的请求数也会多三倍。这不可能。只是说,一个更快的VM是一个好消息,无疑可以对生产环境的Rails应用产生积极的影响。

在InfoQ的采访中,Antonio解释了更多真实的基准测试的需求,并指出他建立Ruby基准测试套件项目正是出于此意图。

查看英文原文:Ruby Performance: Great Shootout Results And A Discovery About Binary MRI vs Source Compiled MRI

你可能感兴趣的:(Ruby性能大比拼:最新Great Shootout结果公布,二进制MRI速度减半)