我有一个相当密集的算法,必须在我的RoR应用程序中经常运行(每秒多次).考虑到Ruby对这种东西的速度有多慢,我觉得在Ruby中做这项工作并不好.
你可能会认为我应该将它添加到某种工作队列并让C++应用程序解决它,但我需要立即返回结果.有没有办法用C++插件扩展RoR?如果我喜欢通过套接字连接到C++应用程序怎么办?或者那只是疯了?
[...]我不认为[...]
进行测量.
也就是说,如果用Ruby编写相当简单,首先在ruby中实现它并进行测量.那么,如果真的是太慢了,找出如何解决它.
即使你需要用另一种语言重写算法,你在ruby中有一个算法,你基本上只需要复制,所以它不会像第一次在(例如)C++中编写它那样耗费时间.
但首先要衡量它.
几种可能性.
首先,看看你是否可以转向Ruby 1.9:它比1.8快得多.
其次,确实有一种在C语言中编写Ruby扩展的方法.
第三,您确实可以使用您认为方便并使用它的任何语言编写单独的流程.最好的方法很难猜测,因为你并没有真正提供太多细节,但想想popen是如何工作的.
另一个替代方案是RubyInline,它允许您在Ruby代码中编写C/C++代码.这很符合JonasKölker的建议,首先在Ruby中编写算法然后找到瓶颈.然后,您可以使用RubyInline来优化瓶颈.