1

Rails コントローラは、その行の 1 つに非常に長い時間がかかる場合に何をしますか? たとえば、行の 1 つは 10000 秒のように非常に長い時間スリープすることを望んでいますsleep(10000)。多くの人が Web サイトを使用し、このコントローラー メソッドを呼び出すと、大量のリソースが消費されますか?

4

1 に答える 1

1

数秒間スリープするため10000、1 つの ruby​​ プロセスがずっとブロックされます。

Web サーバーがこの遅延の前にタイムアウトするように設定されている場合、ブラウザーはエラー メッセージを表示しますが、Rails プロセスは停止しません。

したがって、ここには魔法はありません。

スリープ中はリソースを使用しませんが、Ruby プロセスに必要な RAM は解放されません。そして、このアクションへのリクエストごとに 1 つのプロセスがスタックし、max_nb_ruby_processes_on_your_serverこのアクションへのリクエストから並行して開始されるため、Web サイトはすべてのリクエストに対して応答しなくなり、リクエストを処理するための Ruby プロセスが利用できなくなります。

処理するデータが複雑な場合は、通常、rake taskcrontab または遅延ジョブを介して非同期に呼び出す を介して処理するのが最善です。

于 2012-11-12T20:09:06.980 に答える