使用 Ruby 1.9.1 的一个重要原因就是其显著提高的性能。新的基准结果来自于现有的应用并比较了 1.8.x、JRuby 及 1.9.1 :
我们将 Acunote(在线的企业项目管理和 Scrum 软件)移植到了 JRuby 和 Ruby 1.9 上并运行了性能基准测试集。
Ruby 1.9.1 和 JRuby 的性能都大大超越了 1.8.6,而 1.9.1 又领先于 JRuby,虽然我们可以通过一些命令行参数来改进 JRuby 的性能,但实际情况差不多如此。
1.9.1 的性能改进不仅仅来自于更快的 VM,一些新特性也起到了很大的作用。 Muhammed Ali 向我们展示了如何通过 Ruby 1.9.1 的 Fibers 来度量 Web 应用。另一方面,Muhammed 还指出了 1.9.1 中的 Object#extend 所导致的内存泄漏问题。
与此同时,1.8.6 仍旧是某些项目的不二之选,这是由于1.9.1 缺少了一些库的支持。由于这个原因,很多人热衷于修复1.8.6 的某些瓶颈。 Joe Damato 在其博客上发表了一些文章谈到了这些问题。比如,他谈到了–enable-pthread 背后的事情以及为何禁用该设定会提升30% 的性能。在另一篇文章中,Joe 和 Aman Gupta 探索了 Ruby GC 的一个问题并给出了一个小修复来解决 GC 和 EventMachine 的问题:
* 由于极大地降低了 stack frame 的大小,因此将 GC 的速度提升了 2、3 倍。 * 修复了 EventMachine 中的一个公开 bug——通过 Epoll 来使用线程会极大地降低应用的速度。其原因是每个线程都会继承一个~800,000 字节的 stack,每次上下文切换时都会对其进行复制。
* 在使用 Sinatra+Thin+Epoll+Threads 时会将请求数从每秒 500 个提升到 7000 个,太爽了。
最后, Viktor Hokstad 正在撰写一系列文章讲述如何编写 Ruby 编译器。最近的一篇谈到了怎样才能让Ruby 更快。
查看英文原文: Ruby Performance Roundup: Ruby 1.9.1 Real World Performance, GC vs EventMachine, Ruby Compiler
评论