0

Rails アプリケーションへのリクエストが Phusion Passenger でどのように処理されるかを正確に理解しようとしています。Passenger のドキュメント (ここにあります: http://www.modrails.com/documentation/Architectural%20overview.html#_phusion_passenger_architecture ) を読み、Rails フレームワークとアプリケーション コードのコピーをメモリに保持する方法を理解しました。アプリケーションへのすべてのリクエストが、アプリケーションの別のインスタンスをスピンアップすることによって行き詰まることはありません。私が理解できないのは、これらの個別のアプリケーション インスタンスが私の Linux マシンでネイティブの Ruby プロセスを共有する方法です。私はいくつかの調査を行ってきましたが、ここで私が考えていることは次のとおりです。

1 つの要求が Web サーバーにヒットし、Web サーバーが Passenger をディスパッチして、Passenger のアイドル状態のワーカー プロセスの 1 つで要求を実行します。別の要求がほぼ同時に受信され、さらに別のアイドル状態の Passenger ワーカー プロセスによって処理されます。

この時点で、2 つの異なる Passenger ワーカー プロセスによって管理されている 2 つの要求が実行されています。Passenger は、ワーカー プロセスごとに Linux のネイティブ Ruby スレッド上にグリーン スレッドを作成します。各グリーン スレッドは、コンテキスト切り替えを使用して実行されるため、1 つの Passenger ワーカー プロセスで操作がブロックされても、他のワーカー プロセスの実行が妨げられることはありません。

私は正しい軌道に乗っていますか?

ご協力いただきありがとうございます!

4

1 に答える 1

2

アプリケーション インスタンスは「ネイティブの Ruby プロセスを共有」しません。アプリケーション インスタンス、Ruby プロセス (または、アプリが記述されている言語に応じて Node.js プロセスまたは Python プロセス) であり、「Passenger ワーカー プロセス」とも同じです。また、スレッドとは何の関係もありません。

于 2013-11-12T09:38:46.040 に答える