なぜ Nginx は非常に効率的で高速なのでしょうか?
設計原則
高性能サーバーの一般的な特性は、高い処理速度と低いリソース消費です。同時にオンラインの場合は、数万の接続が存在します。高速な処理速度を実現するには、同時実行モデルの設計が特に重要です。
サーバーの同時実行の量は、2 つの要素によって決まります。1 つは、接続されているプロセスの数です。 1 つはサーバー、もう 1 つは各プロセスが同時に処理できるプロセスの数、同時リクエストの数であるため、サーバー同時実行モデルは、サービス提供方法とリンク処理メカニズムの 2 つの部分で構成されます。
これら 2 つの独自の方法により、同じ種類の Web サーバー間で Nginx のパフォーマンスが向上するため接続方法
一般に、Web サーバーの接続方法は 3 つのタイプに分類されます:マルチプロセス方式、マルチスレッド方式、非同期方式。マルチプロセスでは、メモリのコピーなどの追加のオーバーヘッドが必要ですが、マルチスレッドでは、より小さなオーバーヘッドは必要ありません。非同期では、ノンブロッキング方式を使用して各クライアントと通信し、サーバーはポーリングに 1 つのプロセスを使用します。アプリケーションには、Nginx のワークプロセス プロセスが含まれます。その中で、最も効率が良いのは非同期、最も安定しているのはマルチプロセス、最もリソース占有率が低いのはマルチスレッドです。 #Nginx はイベントモデル (非同期モード) に基づいてサービスを提供します。これは、1 秒あたりの接続数とリクエスト数が非線形であると同時に増加する状況により適しています。負荷が増加しても、メモリおよび CPU 使用率イベントの数は予測可能なままです。 Nginx は、通常のハードウェアを使用してサーバー上で数万の同時接続を処理できます。これが Nginx のパフォーマンスが高い最初の理由です。Nginx が行うその他のこと
上記の 2 つの原則に加えて、内部ではマルチプロセスの単一プロセスを使用して、目に見える詳細な最適化が多数行われています。 CPU とプロセス間のアフィニティを使用してプロセスを特定の CPU にバインドし、プロセス コンテキストの切り替えのコストを回避し、CPU 使用率を削減します。さらに、効率的なメモリ プールを実装し、メモリ使用量を最小限に抑えます。
接続処理メカニズムLinux には、同期 io、同期手数料ブロッキング io の 5 つの接続モデルがあります。 、非同期ブロッキング io (io 多重化)、非同期非ブロッキング io (シグナル駆動または非同期 io)
以下が重要なポイントです:
<1> io 多重化、I/O多重化 モデルを使用するときは、選択またはポーリング関数を使用します。これら 2 つの関数は、プロセスもブロックします。I/O のブロックとは異なり、複数の I/O 操作を同時にブロックすることもでき、複数の I/O 操作を実行することもできます。複数の書き込み操作の I/O 関数が検出され、データの読み取りまたは書き込みが可能になるまで I/O 操作関数は実際には呼び出されません。
IO 再利用モデルでは、通常、セレクトとポーリングはオペレーティング システムによってサポートされていますが、待機するたびに待機する必要があるソケット インターフェイスを設定する必要があり、内部実装は効率的ではありませんソケット セット、異なるオペレーティング システムでは、高性能の監視をサポートするために異なる高度なポーリング技術が使用されますが、一般にこれらの方法は移植可能ではありません。
Nginx は、オペレーティング システムごとに異なる I/O 処理メカニズムをカスタマイズしており、通常はオペレーティング システムの高性能インターフェイスを使用しています。これが、Nginx のパフォーマンスが高い 2 番目の理由です。#< 2> 非同期 IO: 非同期プロシージャ呼び出し要求が発行された場合、呼び出し元は結果をすぐに取得できません。この呼び出しを実際に処理するコンポーネントが完了すると、ステータス、通知、コールバックを通じて入出力操作を呼び出し元に通知します。
Nginx 関連の技術記事の詳細については、Nginx の使用法をご覧ください。チュートリアル
コラム 勉強しましょう!以上がなぜnginxは速いのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。