我刚刚阅读了ROR(还没有潜入它),我听说它不是线程安全的。显然,这并不意味着不止一个人不能同时访问您的网站,那究竟是什么意思呢?线程在ROR中发挥作用的地方?它们只是意味着处理请求吗?
答案 0 :(得分:28)
您的信息已过期。 它是2.2.2
的线程安全请记住Ruby MRI 1.8.x,最广泛使用的Ruby实现使用Green Threads,因此对于1.8.x,如果创建100个线程,它们都在同一个CPU上运行。因此,当使用MRI托管Rails网站时,您可能希望运行Ruby的实例与CPUS一样多。像passenger这样的东西会为你解决这个问题。
这曾经是JRuby的一个大问题,因为JRuby有Native线程,而且杂耍过程似乎是多余的。无论如何,它现在整理出来了。
另外,Iron Ruby,.Net Ruby解释器运行本机线程。
注意:Ruby 1.9.1使用本机线程,但仍然存在全局解释器锁。
答案 1 :(得分:4)
基本上它所说的是你不能在不同线程下的同一进程中运行多个rails副本,因为某些资源可能会在线程之间泄漏而无意中导致奇怪的行为,例如看似正在改变的对象/在随机时间消失。
此外,也可能是类没有设计内置任何同步的情况,因此很难将部分rails放入线程中,并且在线程之间共享其他部分。
答案 2 :(得分:0)
值得一提的是,Ruby MRI 1.8.x使用的是Green Threads,但Ruby MRI 2将使用原生线程。