Rails Rails4 默认将开启线程安全, 所以可以更快了嘛

lyfi2003 · 2012年06月22日 · 最后由 ShiningRay 回复于 2012年06月30日 · 5476 次阅读
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 的线程并发问题了。

下面的文章解释了,为什么我们除了多进程外,还需要多线程:

详细查阅: http://tenderlovemaking.com/2012/06/18/removing-config-threadsafe.html?utm_source=rubyweekly&utm_medium=email

线程安全需要处理线程同步,要协调资源的分配,原则上会比非安全的要慢一些吧? 或者说 rails 4 更快并不是由线程安全引起的。

舍弃 Rack::Lock

#2 楼 @camel 省内存是不是一个极大地优势呢?

需要 登录 后方可回复, 如果你还没有账号请 注册新账号