如果我们说Node.js是单线程的,因此只有一个线程可以处理所有请求,那么Rails是什么?
据我所知,Node.js既是应用程序又是服务器,但我迷失在Rails会是什么? Rails如何根据线程/进程处理请求?
答案 0 :(得分:5)
Rails可以是单线程的,也可以是多线程的,可以是多进程的(每个进程都是单线程的),也可以是多进程,每个进程都是多线程的。
这完全取决于您正在使用的应用服务器,这取决于您正在使用的Ruby实施。 MRI Ruby从1.9开始支持原生线程,但它仍然保留了所谓的全局解释器锁。 GIL阻止Ruby解释器一次在多个线程中运行。在大多数情况下,这并不是什么大问题,因为线程最有帮助的东西是等待I / O.如果你正在使用JRuby或Rubinius,他们实际上可以一次在多个线程中运行Ruby代码。
查看不同的应用服务器以及它们在并发功能方面提供的功能。 Unicorn是用于部署多进程/单线程应用程序的常用方法。 Puma是一款能够运行多线程应用程序的新型应用程序服务器,我相信他们要么添加(或者现在可能已添加,我不确定)运行多个应用程序的能力 - 进程也是如此。乘客似乎能够在我上面列出的每个模型中工作。
我希望这会有所帮助。它应该至少为Google提供一些东西以便找到更多信息。