在所有处理器上运行ruby程序

gcu*_*bed 5 ruby jruby

我一直在寻找优化ruby程序,这个程序对很多数据来说都是计算密集型的.我不知道C并且选择了Ruby(不是我也很清楚)并且除了执行时间之外我对结果非常满意.这是一个很多数据,没有花钱,我想知道我能做些什么来确保我最大化自己的系统资源.

当我运行一个基本的Ruby程序时,它是否使用单个处理器?如果我没有专门为处理器分配任务,Ruby将无法读取我的程序并神奇地加载每个处理器以尽快完成程序吗?我假设没有......

我一直在阅读关于加速Ruby的一些内容,并在另一个线程中读到Ruby不支持真正的多线程(虽然它说JRuby确实如此).但是,如果我将我的程序"分解"为两个可以在不同实例中运行的块并以parralel运行它们......这两个块会自动在两个独立的处理器上运行吗?如果我有四个处理器并打开了四个炮弹并运行了四个独立的部分(1/4) - 它会在1/4的时间内完成吗?

更新

看完评论后,我决定给JRuby一个机会.移植应用程序并不困难.我还没有使用"桃子",但只需在JRuby中运行它,该应用程序运行时间为1/4!疯.我没想到会发生太大变化.现在给.peach打一针,看看它是如何改善的.仍然无法相信提振.

更新#2

刚试了一下桃子.结束剃须另外15%的时间.所以切换到JRuby并使用Peach绝对值得.

感谢大家!

Mar*_*mas 4

使用 JRuby 和peach gem,这再简单不过了。只需将 an 替换.each.peach即可,瞧,您正在并行执行。还有其他选项可以精确控制生成的线程数量等。我已经使用了它并且效果很好。

您将获得接近n倍的加速,其中n是可用的 CPU/内核的数量。我发现最佳线程数略多于 CPU/核心数。