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

  • Werner Schuster
  • 李明(nasi)

2008 年 12 月 22 日

话题:Java.NETRuby语言 & 开发架构

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

Java.NETRuby语言 & 开发架构