メールや外部サイトへの投稿などの長時間実行されるプロセスの場合、DelayedJobsやResqueなどのバックグラウンドワーカーの代わりにRubyThread.newを使用しても大丈夫ですか?
質問する
923 次
1 に答える
2
OKの意味によって異なります。Ruby には Global Interpreter Lock があります (ほとんどの実装はとにかくそうします - JRuby は 1 つの例外です)。これは、Thread.new メソッドを使用して真の同時実行性を得られないことを意味します。ただし、同時実行性がまったく得られないという意味ではありません。これについては、複数の場所でさらに詳しく説明されています。
- http://ablogaboutcode.com/2012/02/06/the-ruby-global-interpreter-lock/
- http://merbist.com/2011/10/03/about-concurrency-and-the-gil/
- http://www.igvita.com/2008/11/13/concurrency-is-a-myth-in-ruby/
Delayed Jobs と Resque の両方の方法には、長時間実行される操作を実行する 1 つ以上の個別のプロセスが含まれます。複数のプロセスを使用すると、GIL がまったく邪魔にならないため、Rails アプリとバックグラウンド ワーカー プロセスの間に真の同時実行性が得られます。
于 2012-12-21T06:09:55.010 に答える