def threadsafe!
@preload_frameworks = true
@cache_classes = true
@dependency_loading = false
@allow_concurrency = true
self
end
具体说,preload_frameworks
预加载框架会被启用,以保证在各线程提供 request 服务时,就已经加载完成所有的框架相关的东东。
cache_classes
打开,这个不用多说,我们 developments 的动态更新类的特性必须关闭。
dependency_loading
就个特性是由 ActiveSupport 提供的,是在常量未定义时,被捕捉动态加载,显然不能多线程安全,所以关闭。
allow_concurrency
这个是 Rack 中间件 Lock 用到的,打开后,下一层代码就说明可以进行多线程安全运行了,嗯,以前关闭这个特殊就足于保证 Rails 的线程并发问题了。
下面的文章解释了,为什么我们除了多进程外,还需要多线程: