你的意思是Ruby on Rails不支持多线程吗?

6

我刚刚在阅读关于ROR的内容(还没有深入研究),听说它不是线程安全的。显然,这并不意味着不能有多个人同时访问您的网站,那么它到底是什么意思呢?线程在ROR中起到了什么作用?它们只是请求处理吗?

3个回答

28

您的信息已经过时。 截至2.2.2,它是线程安全的。

请记住Ruby MRI 1.8.x,Ruby最广泛使用的实现使用Green Threads,因此在1.8.x中,如果您创建100个线程,它们都在同一个CPU上运行。因此,在使用MRI托管Rails网站时,您可能希望有尽可能多的Ruby实例运行和您拥有的CPU数量相同。像passenger这样的东西会为您处理这些问题。

这曾经是JRuby的一个大问题,因为JRuby具有本地线程,而搞定进程似乎是多余的。无论如何,现在已经解决了。

顺便说一下,.Net Ruby解释器Iron Ruby运行本地线程。

注意:Ruby 1.9.1使用本地线程,但仍然存在全局解释器锁定。


4
基本上它的意思是,在不同的线程下不能在同一进程中运行多个rails的副本,因为某些资源可能会在线程之间意外泄漏,导致奇怪的行为,比如对象似乎在随机时间改变/消失。
此外,还有可能情况是类没有任何同步内置其中,这使得将rails的部分放入线程并使其他部分在线程之间共享变得困难。

0
值得一提的是,Ruby MRI 1.8.x 使用绿色线程,但 Ruby MRI 2 将拥有本地线程。

你说的没错,但我做出了区分,因为1.9是通往2.0的实验版本。(有点像奇数编号的Linux内核是实验性的,不应该在生产中使用。) - Benjamin Oakes
@Benjamin,Ruby官网已经宣布1.9稳定版发布,相对于1.8版本(基于yarv)进行了大规模架构变更。我不确定2.0版中的功能范围是否已经确定。 - Sam Saffron
也许你能告诉我你获取信息的来源? 我看到的是:Ruby 1.9.2预览版1已发布。 这是1.9.2系列的预览版本,只是一个快照。 它仍然有一些已知的bug,有时不稳定。让我们知道你的看法。 - Benjamin Oakes
就我所知,1.9.1 是稳定的。我写的内容是基于早期版本号策略的公告而编写的。(也就是说,现在的1.9.1最初本来要称为2.0。) - Benjamin Oakes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接