Ruby效率

时间:2012-03-03 09:38:28

标签: ruby metaprogramming performance

我刚刚在coursera(https://www.coursera.org/saas/)听了一个讲座,教授说Ruby中的所有内容都是一个对象,并且每个方法调用都在调用一个对象的send方法,并将一些params传递给它。这包括数字,数组和其他基本类。

我继续使用谷歌并寻找效率基准,我找到了以下内容:http://benchmarksgame.alioth.debian.org/u32/which-programs-are-fastest.html

虽然编译语言比解释语言更快并不令人震惊,但(Ruby,Python)和Java之间的性能差异令人震惊。

即使有一种编译ruby代码的方法(我还没有研究过这个主题),我认为由于语言中的核心“问题”,效率问题仍然存在: 基本操作太重:1 + 1需要更多的CPU周期才能完成。

我喜欢Ruby。我喜欢元编程的高级方面,我认为这是未来的发展方向,我同意,有时我们需要妥协某些事情才能更有效:我不认为自己在汇编中优化我的代码为了节省几毫秒。但是,当我们在C中做1 + 1时,它不会以指数方式增加基本操作所花费的时间!

我的问题是你们是如何处理操作密集型程序的?我们有一个Ruby on Rails项目,我们已经开发了大约一年了,我们正处于开始通过地理位置遍历和优先级进行一些机器学习的时候。

我希望您了解我的疑虑并提供合理的建议: - )

1 个答案:

答案 0 :(得分:4)

这似乎不是一个糟糕的问题,因为它似乎在看评论。唯一的问题是错误使用的单词 exponential ,但所描述的问题是真实的。

我有类似你描述的Ruby使用模式 - 我在Ruby中做了很多自然语言处理,这也涉及机器学习。 我使用以下技术来克服Ruby性能问题:

  1. 在适用的情况下,将C库与Ruby接口一起使用。例如。我不会使用SVM或决策树的Ruby实现,因为在C中有更快的实现。

  2. 如果C实现不可用,请编写我自己的Ruby包装器。通常这没有什么问题 - 我使用RubyInline gem广泛地将Ruby与C代码粘合在一起。

  3. Patch Ruby内存管理或手动控制其垃圾收集器。

  4. JRuby视为您的Ruby平台 - 您可以轻松访问用于机器学习(Weka)等的快速Java库,并且您的应用程序的一般性能将得到保留甚至更好。