- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
不把 $redis = Redis.new
放在 Unicorn 的 after_fork 中有什么负面影响,因为 redis-rb 是线程安全的?假设我有不止一名 worker 。
而不是仅仅将那行代码放在 environment.rb 或初始化器中?
最佳答案
after_fork
与线程安全关系不大。它在父进程派生子进程时使用,而不是在生成线程时使用。
为什么要关心
如果你从不 fork ,你可能不会。
当你 fork 时,父进程和子进程共享文件和套接字描述符(数据库连接、redis 连接)。如果您不重新打开子项中与 Redis 的连接,则来自父项的数据可以在套接字上与来自子项的数据交错。
阅读A Unix Shell in Ruby Pipes以获得对正在发生的事情的更详细的描述。
关于ruby-on-rails - 如果我不在 after_fork 中 $redis = Redis.new 会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12662634/
我试图了解这样做对性能的影响: Resque.before_fork do Rails.logger.info "in resque.rake before fork" defined
是否phusion passenger使用 fork ?如果是这样,我应该在哪里设置 after_fork配置,as recommended by Heroku for unicorn (重新:使用
不把 $redis = Redis.new 放在 Unicorn 的 after_fork 中有什么负面影响,因为 redis-rb 是线程安全的?假设我有不止一名 worker 。 而不是仅仅将那行
在 unicorn.conf 中,preload_app 应该设置为 true 以提高性能,但需要在 fork 回调中启动和停止 Redis。 The example here指的是 Resque,但
我是一名优秀的程序员,十分优秀!