Webサーバーはどのようにして新しい要求をリッスンしますか?
Webサーバーとその動作方法について学習するときに、Webサーバーが常に要求を待機しているのか、それとも要求を受けてアクションを開始するのを待つのかが不思議に思うかもしれません。それを念頭に置いて、今日のSuperUser Q&Aの投稿は読者の好奇心を満たすための答えを持っています.
本日の質疑応答セッションは、コミュニティ主導のQ&A Webサイトのグループである、Stack Exchangeの下位区分であるSuperUserの好意により提供されます。.
xmodulo / Linuxスクリーンショットのスクリーンショット提供(Flickr).
質問
SuperUserリーダーuser2202911は、Webサーバーが新しい要求をどのように待機するかを知りたいです。
私はWebサーバーがどのように機能するかについての「より深いレベル」の詳細を理解しようとしています。たとえばApacheなどのサーバーが、新しい要求を継続的にポーリングしているのか、それともある種の割り込みシステムによって機能しているのかを知りたいのです。それが割り込みであるならば、何が割り込みを引き起こしていますか?ネットワークカードドライバですか?
Webサーバーはどのようにして新しいリクエストをリッスンしますか?
答え
SuperUserの貢献者Greg Bowserが私たちに答えを持っています。
簡単に言えば、ある種の割り込みシステムです。基本的に、これらはブロッキングI / Oを使用します。つまり、新しいデータを待っている間はスリープ(ブロック)します。.
- サーバーは待機ソケットを作成し、新しい接続を待つ間ブロックします。この間、カーネルはプロセスを 割り込み可能な睡眠 他のプロセスを宣言して実行します。これは重要な点です。プロセスを継続的にポーリングすると、CPUリソースが無駄になります。カーネルは、実行する作業があるまでプロセスをブロックすることで、システムリソースをより効率的に使用することができます。.
- 新しいデータがネットワークに到着すると、ネットワークカードは割り込みを発行します.
- ネットワークカードからカーネルへの割り込みがあることを確認すると、ネットワークカードドライバを介してネットワークカードから新しいデータを読み取り、それをメモリに格納します。 (これは迅速に行わなければならず、通常は割り込みハンドラの内部で処理されます。)
- カーネルは新しく到着したデータを処理し、それをソケットに関連付けます。そのソケットをブロックしているプロセスは実行可能とマークされます。つまり、実行可能になりました。必ずしもすぐに実行されるわけではありません(カーネルは他のプロセスを実行することを決定する場合があります).
- 余暇には、カーネルはブロックされたWebサーバープロセスを起こします。 (今から実行可能になったので)
- Webサーバープロセスは、時間が経過していないかのように実行を続けます。そのブロッキングシステムコールは戻り、新しいデータを処理します。その後、手順1に進みます。.
説明に追加するものがありますか?コメントで音を消す。他の技術に精通したStack Exchangeユーザーからの回答をもっと読みたいですか?こちらのディスカッションスレッドをチェックしてください。.