ruby-on-rails - 如果 Node.js 是单线程的,那么 Rails 是什么?

标签 ruby-on-rails node.js

如果我们说 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/

相关文章:

ruby-on-rails - Ruby - 在 tmp/pids/thin.pid (Thin::PidFileNotFound) 中找不到 PID

ruby-on-rails - Rails 自定义验证

ruby-on-rails - Active Admin - 用户和管理员的相同模型

mysql - gem install mysql2 不起作用

javascript - 将 handlebars 变量传递给客户端 js 文件

node.js - Mocha 和超测有什么区别?

javascript - Strongloop id 不存储为字符串

ruby-on-rails - 如何通过验证预先加载 fields_for

node.js - 在 express 上使用 nginx 和 ssl 实现的反向代理失败

javascript - 如果路径有效,Lodash 返回值数组