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
评论