2
因爲redis-rb是線程安全的,所以不要把$redis = Redis.new
放在Unicorn的after_fork中,這會帶來什麼負面影響?假設我有一個以上的工人。
與將這行代碼放入environment.rb或intializer中相反?
因爲redis-rb是線程安全的,所以不要把$redis = Redis.new
放在Unicorn的after_fork中,這會帶來什麼負面影響?假設我有一個以上的工人。
與將這行代碼放入environment.rb或intializer中相反?
after_fork
與線程安全無關。它在父進程分派子進程時使用,而不是在產生線程時使用。
爲什麼你應該關心
如果你從來沒有叉,你可能不知道。
當您fork時,父進程和子進程共享文件和套接字描述符(db連接,redis連接)。如果您沒有重新打開孩子與Redis的連接,則可以使用來自孩子的數據在父座上交錯父母的數據。
閱讀A Unix Shell in Ruby Pipes瞭解更多詳情。