ホームページ 運用・保守 Nginx nginx が Apache より速い理由

nginx が Apache より速い理由

Jun 10, 2019 am 09:46 AM
apache nginx

nginx が Apache より速い理由

nginx が Apache より速いのはなぜですか?

一般的ないくつかの概念について話しましょう:

1: nginx は同時実行性が高い場合は Apache より高速であり、同時実行性が低いことは明らかではありません

2: 速い理由は nginx の epoll モデルによるものです

apache はマルチスレッドまたはマルチプロセスです。動作しているとき、http 応答が来ると、 1 つのプロセスがそれを受信 (リッスン) -> 識別処理 -> リクエストを返す。このプロセス中、プロセスはすべてを処理します。apche はソケット I/O の読み取りまたは書き込みを行いますが、読み取りまたは書き込みはブロックされます。ブロックとは、プロセスが次のことを行う必要があることを意味します。サスペンドされてスリープ状態に入る 接続が多くなると必然的にApacheはリクエストに応答するプロセスを多く生成する プロセスが多くなるとCPUが頻繁にプロセスを切り替えてリソースと時間を消費するため、Apacheがダウンしてしまうはっきり言って、それほど多くのプロセスを処理できません。

Nginx は、非同期でノンブロッキングの epoll モデルを採用しています。 Nginx の場合、完全な接続要求処理は一度に 1 つのイベントに分割されます。たとえば、accept()、receive()、ディスク I/O、send() など、各部分には処理する対応するモジュールがあり、完全なリクエストは数百のモジュールによって処理される場合があります。本当のコアはイベント収集および配布モジュールであり、すべてのモジュールを管理する中核となります。

コア モジュールのスケジューリングのみが、対応するモジュールがリクエストを処理するために CPU リソースを占有することを許可できます。 HTTP リクエストを例に挙げると、まず、対象のリッスン イベントをイベント収集および配信モジュールに登録します。登録後は、ブロックせずに直接リターンします。その後は、特に心配する必要はありません。カーネルが通知するタイミングで通知されます。接続が来ます (epoll の番です)。クエリがプロセスに伝えます)、CPU は他のことを処理できます。

リクエストが来ると、リクエスト全体に対応するコンテキストが割り当てられます(実際には事前に割り当てられています)。このとき、新たに注目するイベント(read関数)が登録されます。クライアント データが来ると、カーネルはデータを読み取れることがプロセスに自動的に通知されます。データを読み取った後、解析されます。解析後、リソース (I/O) を見つけるためにディスクに移動します。I/O が完了すると、が完了すると、プロセスに通知が送られ、プロセスはクライアント send() へのデータの送信を開始します。現時点ではブロックされていません。呼び出し後は、カーネルが通知結果を送り返すのを待つだけです。

リクエスト全体は多くのステージに分割されており、各ステージは多くのモジュールに登録され、すべて非同期かつノンブロッキングで処理されます。ここでの非同期とは、結果が返されるのを待たずに何かを実行することを指し、完了すると自動的に通知されます。

インターネットで例を見つけました:

Apache のワークフローを説明するための簡単な例を挙げることができます。私たちは通常、レストランに食事に行きます。レストランの稼働モデルは、常に 1 人のウェイターが顧客にサービスを提供するというもので、ウェイターはドアのところで客を待ち(聞く)、客が到着したら、用意されたテーブルに挨拶する(受付)、顧客の注文を待ち (リクエスト uri)、キッチンに行きシェフを呼びます。料理の注文を出し (ディスク I/O)、キッチンの準備が整うのを待ち (読み取り)、料理を提供します。ゲスト (送信) ウェイター (プロセス) は多くの場所でブロックされています。

このように、ゲストが増えると (HTTP リクエストが増えると)、レストランはサービスを提供するためにより多くのウェイターを呼び出すことしかできません (フォーク プロセス)。ただし、レストランのリソースは限られているため (CPU)、ウェイターが多すぎると管理コストが発生し、非常に高い (CPU コンテキスト スイッチング) ため、ボトルネックになります。

Nginx がそれをどのように処理するかを見てみましょう?レストランのドアにドアベルを掛けます (epoll モデルのリッスンを登録します)。ゲスト (HTTP リクエスト) が到着すると、ウェイターがそれを受け取る (受け入れる) ために送信されます。その後、ウェイターは他の作業に移ります (ゲストが食事を注文したら、ウェイターに電話します (データは read() で到着します)。ウェイターが来て、メニューをキッチンに持って行きます (ディスク I/O)。ウェイターは他のことをしに行きます。キッチンの準備ができたら、ウェイターを呼び出します (ディスク I/O)。O 終了)、ウェイターはゲストに料理を提供します (send())、キッチンは 1 つの料理を提供します準備ができたらゲストに提供し、ウェイターはその間に他のことを行うことができます。

プロセス全体は多くのステージに分割されており、各ステージには対応するサービス モジュールがあります。ゲストが増えたら、レストランもより多くの人を収容できるように考えてみましょう。

Nginx の技術記事の詳細については、Nginx の使用方法チュートリアル 列をご覧ください。

以上がnginx が Apache より速い理由の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Dockerによってコンテナを起動する方法 Dockerによってコンテナを起動する方法 Apr 15, 2025 pm 12:27 PM

Docker Containerの起動手順:コンテナ画像を引く:「Docker Pull [Mirror Name]」を実行します。コンテナの作成:「docker create [options] [mirror name] [コマンドとパラメーター]」を使用します。コンテナを起動します:「docker start [container name or id]」を実行します。コンテナのステータスを確認してください:コンテナが「Docker PS」で実行されていることを確認します。

Windowsでnginxを構成する方法 Windowsでnginxを構成する方法 Apr 14, 2025 pm 12:57 PM

Windowsでnginxを構成する方法は? nginxをインストールし、仮想ホスト構成を作成します。メイン構成ファイルを変更し、仮想ホスト構成を含めます。 nginxを起動またはリロードします。構成をテストし、Webサイトを表示します。 SSLを選択的に有効にし、SSL証明書を構成します。ファイアウォールを選択的に設定して、ポート80および443のトラフィックを許可します。

Dockerコンテナの名前を確認する方法 Dockerコンテナの名前を確認する方法 Apr 15, 2025 pm 12:21 PM

すべてのコンテナ(Docker PS)をリストする手順に従って、Dockerコンテナ名を照会できます。コンテナリストをフィルタリングします(GREPコマンドを使用)。コンテナ名(「名前」列にあります)を取得します。

Nginxが開始されるかどうかを確認する方法 Nginxが開始されるかどうかを確認する方法 Apr 14, 2025 pm 01:03 PM

nginxが開始されるかどうかを確認する方法:1。コマンドラインを使用します:SystemCTLステータスnginx(Linux/unix)、netstat -ano | FindStr 80(Windows); 2。ポート80が開いているかどうかを確認します。 3.システムログのnginx起動メッセージを確認します。 4. Nagios、Zabbix、Icingaなどのサードパーティツールを使用します。

Docker用のコンテナを作成する方法 Docker用のコンテナを作成する方法 Apr 15, 2025 pm 12:18 PM

Dockerでコンテナを作成します。1。画像を引く:Docker Pull [ミラー名]2。コンテナを作成:Docker Run [Options] [Mirror Name] [コマンド]3。コンテナを起動:Docker Start [Container Name]

CentosでZookeeperクラスターを構築する方法 CentosでZookeeperクラスターを構築する方法 Apr 14, 2025 pm 02:09 PM

ZookeeperクラスターをCentOSシステムに展開するには、次の手順が必要です。環境はJavaランタイム環境をインストールする準備ができています。次のコマンドを使用してJava 8開発キットをインストールします。 WGETコマンドを使用して、Zookeeper-3.8.xを実際のバージョン番号にダウンロードして置き換えます:wgethttps://downloads.apache.or

CENTOSシステムの障害を解決する方法 CENTOSシステムの障害を解決する方法 Apr 14, 2025 pm 01:57 PM

CENTOSシステムの障害を解決するには多くの方法があります。いくつかの一般的な手順と手法は次のとおりです。1。ログファイル/var/log/メッセージを確認します。これには、さまざまなシステムイベントが含まれています。 /var/log/secure:SSHログインの試行などのセキュリティ関連ログ。 /var/log/httpd/error_log:Apacheサーバーを使用する場合、ここにエラーメッセージが表示されます。 2。診断ツールを使用するDMESG:ハードウェアやドライバーの質問を理解するのに役立つカーネルリングバッファーの内容を表示

nginxを開始する方法 nginxを開始する方法 Apr 14, 2025 pm 01:06 PM

質問:nginxを開始する方法は?回答:nginxスタートアップnginx検証nginxはnginxを開始しました他のスタートアップオプションを自動的に開始

See all articles