假设已经生成了三个Rails实例并且正在接收请求。
对于每个请求,Thread.new被称为一堆次数,以便在带外提出一些交叉问题并更快地返回响应。
让我感到困惑的是在Rails实例的幕后发生的事情。
我猜想在产生的所有线程都已完成执行之前,Rails实例还没有准备好处理另一个请求?
答案 0 :(得分:2)
要安全地执行此操作,您需要在rails中启用threadsafe选项:
config.threadsafe!
否则,结果可能未定义(取决于您执行的操作)。
在任何一种情况下,在处理另一个请求之前,Rails将不阻塞线程。为此,您必须在线程上调用#join
。线程将很乐意在后台继续处理。如果您正在寻找更具体的内容,请发布一些代码。
请注意,通常使用delayed_job
或factory_girl
等库来提供后台处理,而不是自己实例化线程。有关为什么你也使用具有良好线程支持的ruby实现(我使用JRuby)的一个很好的论据,请参阅后者的文档。如果你正在广泛地这样做。