ruby-on-rails - 默认情况下,Rails是否具有“零”并发性?

标签 ruby-on-rails multithreading concurrency mutex rack

我正在使用Rails的一些中间件,使用的是最新版本:

pfernand-2-mn:~ pfernand$ rails -v
Rails 3.1.2

这是rake middleware的输出:
use ActionDispatch::Static
** use Rack::Lock **
use ActiveSupport::Cache::Strategy::LocalCache
use Rack::Runtime
use Rails::Rack::Logger
use ActionDispatch::ShowExceptions
use ActionDispatch::RemoteIp
use Rack::Sendfile
use ActionDispatch::Callbacks
use ActiveRecord::ConnectionAdapters::ConnectionManagement
use ActiveRecord::QueryCache
use ActionDispatch::Cookies
use ActionDispatch::Session::CookieStore
use ActionDispatch::Flash
use ActionDispatch::ParamsParser
use Rack::MethodOverride
use ActionDispatch::Head
use ActionDispatch::BestStandardsSupport
run MyApp::Application.routes

关键是第二个组件Rack::Lockas far as I know,这是一个互斥体,它包裹了整个Friging rails stack(!)

这是否意味着无论您使用什么平台,Rails都不会并发? (我正在使用JRuby)。

我知道我可以使用以下方法删除锁:
config.middleware.delete(Rack::Lock)
但是可悲的是,这破坏了一切。这是否意味着我的应用程序不是线程安全的?

最佳答案

您应该在config/environments/production.rb中看到以下条目

  # Enable threaded mode
  # config.threadsafe!

在JRuby或其他线程友好的环境中取消注释即可以线程安全模式进行部署。

关于ruby-on-rails - 默认情况下,Rails是否具有“零”并发性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9979442/

相关文章:

c++ - 如何在 C++11 中多线程读取文件?

java - 将 FX 嵌入到 swing 中时出现问题

java - 没有状态的对象在发布时总是可见吗?

Rails 中的 JQuery 在从另一个页面链接后失败,但在页面加载时工作

ruby-on-rails - Carrierwave gem 安全文件路径无法读取文件错误

ruby-on-rails - 使用 Devise 的 Rails 中的 session 变量是 'session' 还是 'user_session'?

c++ - C/C++ 编译器能否通过 pthread 库调用合法地将变量缓存在寄存器中?

ruby-on-rails - 现有应用程序中的 Spree 电子商务

multithreading - 设计帮助 : threading within a struct

elasticsearch - Elasticsearch多重搜寻API