2012-09-30 43 views
2

因为redis-rb是线程安全的,所以不要把$redis = Redis.new放在Unicorn的after_fork中,这会带来什么负面影响?假设我有一个以上的工人。

与将这行代码放入environment.rb或intializer中相反?

回答

4

after_fork与线程安全无关。它在父进程分派子进程时使用,而不是在产生线程时使用。

为什么你应该关心

如果你从来没有叉,你可能不知道。

当您fork时,父进程和子进程共享文件和套接字描述符(db连接,redis连接)。如果您没有重新打开孩子与Redis的连接,则可以使用来自孩子的数据在父座上交错父母的数据。

阅读A Unix Shell in Ruby Pipes了解更多详情。

相关问题