nginx
nginx は、高性能 HTTP サーバー、リバース プロキシ サーバー、および IMAP/POP3/SMTP サーバーです。
最大 50,000 を超える同時接続までの応答をサポートできるため、nginx はネットワーク IO モデルとして epoll/kqueue を選択しました。
nginx は負荷分散サーバーとしても使用できます。nginx は C 言語で書かれています。
nginx はメインプロセスと複数のワーカープロセスであり、ワーカープロセスはシングルスレッドです。各ワーカー プロセスは、非同期かつノンブロッキングな方法でクライアントのリクエストを処理できます。
【拡張学習非同期ノンブロッキングとepoll select poll kqueue】
nginxのPHPは、fastcgiメソッドを使用してnginxと結合されます。
クライアントは nginx サーバーにリクエストを送信し、nginx サーバーは fastcgi を介して処理するためにそのリクエストを php に渡します。
その後、nginx サーバーは結果を nginx サーバーに返します。クライアント。
fastcgiの知識
CGIとは、ユニバーサルゲートウェイインターフェースであり、外部アプリケーションとWebサーバー間のインターフェース規格であり、外部アプリケーションとWebサーバー間で情報を転送するための手順です。
CGI 仕様により、Web サーバーが外部プログラムを実行し、その出力を Web ブラウザーに送信できるようになります。
fastcgi は CGI を改良したものです。
Fastcgi はメモリ常駐 CGI のようなものです。リクエストが到着すると、CGI はまずリクエストを処理するプロセスをフォークアウトします。
fastcgi がロードを開始すると、複数の CGI インタープリターを起動し、Web サーバーが接続するのを待ちます。
クライアントリクエストがウェブサーバーに到達すると、fastcgi プロセスマネージャーはリクエストを処理する CGI インタープリターを選択します。
利点は、CGI インタープリターがメモリにロードされ、必要になるたびにメモリから読み込む必要がないことです。これにより、サイトのパフォーマンスが大幅に向上します。 fastcgi の問題は、php 設定を変更するときに発生することです。すぐには効果が現れません。リロードする必要があります。
ブロッキング
リクエストがクライアントから送信され、Web サーバーがそのリクエストを受信します。このリクエストには IO 操作が必要です。その後、Web サーバーは 10 秒間待機します。他のクライアントのリクエストを拒否します。
ノンブロッキング
クライアントリクエストが到着し、Web サーバーがリクエストを受信します。このリクエストには IO 操作が必要であり、IO には 10 秒かかります。
Web サーバーは 10 秒間の IO 操作中に他のクライアントリクエストを受信できます。 Web サーバーはこれらのリクエストのファイル記述子をキューに入れ、IO 操作の準備が整うと、データがクライアントに送信されます。
非同期ノンブロッキング IO モデル
1 つのマスター スレッドと複数のワーカー スレッド。要求されたイベントが適切に処理されなかった場合、イベント ファイル記述子はキューに配置されます。つまり、リクエストによって返された結果を読み取るため、多数の同時リクエストを処理できます。もちろん、ここでの同時実行とは、ワーカーがスレッドであるため、同時に処理できるリクエストは 1 つだけです。 。
非同期イベントの準備ができていないため、この切り替えもプロアクティブに行われます。
ここでの切り替えにはコストはかかりません。これは、複数の準備されたイベントをループで処理するものであると理解できます。これは実際に当てはまります。
マルチスレッドと比較して、このイベント処理方法には、スレッドを作成する必要がなく、各リクエストが占有するメモリが非常に少なく、コンテキストの切り替えがないという大きな利点があります。
イベント処理は非常に軽量です。同時実行がどれほど多くても、不必要なリソースの浪費 (コンテキストの切り替え) にはつながりません。
上記では、nginx の学習と構成について、nginx のコンテンツを含めて紹介しています。PHP チュートリアルに興味のある友人に役立つことを願っています。