如果我们说 Node.js 是单线程的,因此只有一个线程处理所有请求,那么 Rails 是什么?
据我所知,Node.js 既是应用程序又是服务器,但我不知道 Rails 会是什么? Rails 如何处理线程/进程方面的请求?
最佳答案
Rails 可以是单线程的,也可以是多线程的,可以是多进程的(每个进程都是单线程的),也可以是多进程的,每个进程都是多线程的。
这实际上完全取决于您使用的应用程序服务器,并且在某种程度上取决于您使用的是哪种 Ruby 实现。 MRI Ruby 从 1.9 开始支持 native 线程,但它仍然保持所谓的全局解释器锁。 GIL 防止 Ruby 解释器同时在多个线程中运行。在大多数情况下,这并不是什么大问题,因为线程最有用的是等待 I/O。如果您使用的是 JRuby 或 Rubinius,它们实际上可以同时在多个线程中运行 Ruby 代码。
查看不同的应用服务器以及它们在并发功能方面提供的功能。 Unicorn 是部署多进程/单线程应用程序的常用工具。 Puma 是一个较新的应用程序服务器,能够运行多线程应用程序,我相信它们也正在添加(或者现在可能已经添加,我不确定)运行多进程的能力。 Passenger 似乎能够在我上面列出的每个模型中工作。
希望对您有所帮助。它至少应该为您提供一些东西,以便 Google 查找更多信息。
关于ruby-on-rails - 如果 Node.js 是单线程的,那么 Rails 是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24520951/