ホームページ  >  記事  >  運用・保守  >  nginx が高い同時実行性を実現する方法

nginx が高い同時実行性を実現する方法

(*-*)浩
(*-*)浩オリジナル
2019-06-04 17:34:396672ブラウズ

簡単に言うと、これは非同期、ノンブロッキングで、epoll と多くの基盤となるコードの最適化を使用します。

もう少し詳しく言うと、nginxの特殊なプロセスモデルとイベントモデルの設計です。

nginx が高い同時実行性を実現する方法

ビデオ コースの推奨事項 →: 「数千万のデータに対する同時実行ソリューション (理論と実践)」

プロセス モデル

nginx はマスター プロセスと複数のワーカー プロセスを採用しています。

マスター プロセスは主にリクエストの収集と配布を担当します。リクエストが届くと、マスターはワーカー プロセスを開始してリクエストを処理します。

マスター プロセスは、高い信頼性を確保するためにワーカーのステータスを監視する役割もあります。

ワーカー プロセスは、通常、CPU コアの数に一致するように設定されます。 nginx のワーカー プロセスは Apache とは異なります。 Apche プロセスは同時に 1 つのリクエストしか処理できないため、多くのプロセス (数百、場合によっては数千) が開かれることになります。 nginx のワーカー プロセスが同時に処理できるリクエストの数はメ​​モリによってのみ制限されるため、複数のリクエストを処理できます。

イベント モデル

nginx は非同期でノンブロッキングです。

リクエストが受信されるたびに、それを処理するワーカー プロセスが存在します。しかし、それがプロセス全体ではありません。リクエストを上流 (バックエンド) サーバーに転送し、リクエストが返されるのを待つなど、ブロックが発生する可能性があるプロセス。そうすれば、処理作業者は愚かに待つことはなく、リクエストを送信した後、「上流が戻ったら教えてください。続行します」というイベントを登録します。それで彼は休みました。この時点で、別のリクエストが来た場合は、この方法ですぐに対応できます。上流サーバーが戻ると、このイベントがトリガーされ、ワー​​カーが引き継ぎ、リクエストはダウンし続けます。

Web サーバーの動作特性により、各リクエストの処理時間のほとんどがネットワーク送信に費やされることが決まり、実際、サーバー マシンに費やされる時間はそれほど多くありません。これが、わずか数プロセスで高い同時実行性を解決する秘訣です。

IO 多重化モデル epoll

epoll()、カーネルはリンク リストを維持し、epoll_wait はリンク リストが空かどうかを直接チェックして、ファイル記述子の準備ができているかどうかを確認します。 。カーネルは、各 sockfd 上のデバイス ドライバーで確立されたコールバック関数に基づいて epoll を実装します。その後、sockfd 上のイベントが発生すると、対応するコールバック関数が呼び出されて、この sockfd がリンク リストに追加されますが、他の「アイドル」状態は追加されません。

select()、カーネルは回転トレーニング メソッドを使用して fd の準備ができているかどうかを確認します。sockfd は配列のようなデータ構造 fd_set に保存され、キーは fd、値は 0 または 1 です。 。

poll()

[概要]: select と比較した epoll の最大の利点は、sockfd の数が増加しても効率が低下しないことです。

Nginx 関連の技術記事の詳細については、Nginx の使用法チュートリアル 列にアクセスして学習してください。

以上がnginx が高い同時実行性を実現する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。