(PHP7カーネル解析-1) CGIとFastCGI
CGI: Web サーバーと Web アプリケーションの間でデータを交換するためのプロトコルです。
FastCGI: CGI と同じ通信プロトコルですが、CGI よりも効率が最適化されています。
PHP-CGI: Webサーバーが提供するCGIプロトコルに対するPHP(Webアプリケーション)のインターフェースプログラムです。
PHP-FPM: PHP (Web アプリケーション) によって Web サーバーに提供される FastCGI プロトコルのインターフェイス プログラムです。また、クライアントの場合、比較的インテリジェントなタスク管理
CGI ワークフローも提供します。 Index.html を要求すると、Web サーバーはファイル システム内でこのファイルを見つけてブラウザに送信します。ここで配布されるのは静的データです。
2. Web サーバーは、index.php リクエストを受信すると、対応する CGI プログラム (PHP パーサー) を開始します。次に、PHP パーサーは php.ini ファイルを解析し、実行環境を初期化してリクエストを処理し、処理結果を CGI で指定された形式で返し、プロセスを終了し、Web サーバーは結果をブラウザに返します。FastCGIワークフロー
1. クライアントがindex.htmlをリクエストすると、Webサーバーはファイルシステム内でこのファイルを見つけてブラウザに送信します。ここで配布されるのは静的データです。
2. Webサーバーがindex.phpリクエストを受信すると、FastCGIプログラム(FastCGIは起動時に実行環境を初期化し、各CGIプロセスプールが実行環境を共有します)がCGIプロセスプール内のCGIプロセスを選択してリクエストを処理します。 、CGIで指定された形式で処理結果を返し、次のリクエストを待ち続けます。PHP-FPM の基本的な実装
1. PHP-FPM の実装では、マスター プロセスを作成し、マスター プロセス内にワーカー プールを作成してソケットをリッスンさせ、複数の子プロセスをフォークアウトします。 (work) これらの子プロセスは、それぞれの受け入れリクエストの処理は非常に単純で、リクエストが到着すると、リクエストデータの読み取りを開始し、処理を開始します。この期間中は他のリクエストを受信しません。つまり、PHP-FPM のサブプロセスは、このリクエストが処理された後でのみ応答できます。受け入れられます
2. PHP-FPM のマスタープロセスとワーカープロセスの間には直接通信はなく、マスターはワーカープロセスの現在のステータスなどの情報を共有メモリを通じて取得します。処理されたリクエストの数など。マスタープロセスがワーカープロセスを強制終了したい場合、シグナルを送信してワーカープロセスに通知します。 3.PHP-FPM は複数のポートを同時に監視できます。各ポートはワーカー プールに対応し、各プールは複数のワーカー プロセスに対応しますワーカー ワークフロー
1。 : ワーカー プロセスは fcgi_accept_request() でリクエストを待機します 2. リクエストを解析します。fastcgi リクエストが到着すると、リクエスト データが完全に到着するまでリクエスト データの受信と解析を開始します。 ; 3. リクエストの初期化: php_request_startup() を実行します。この段階では、PHP_RINIT_FUNCTION() が呼び出されます。
4. PHP スクリプトのコンパイルと実行は、php_execute_script() によって完了します。リクエストが完了すると、拡張機能ごとに php_request_shutdown() が呼び出されます: PHP_RSHUTDOWN_FUNCTION()、ステップ (1) に入り、次のリクエストを待ちます。
マスタープロセス管理
2.dynamic : 動的プロセス管理。fpm の開始時に、マスターがアイドル状態のワーカーの数が構成された pm.min_spare_servers の数より少ないことを検出した場合、最初に pm.start_servers に従って特定の数のワーカーを初期化します。リクエストが多すぎてワーカーが処理できないことを示します)、ワーカー プロセスはフォークされますが、アイドル状態のワーカーの数が pm.max_spare_servers を超えていることがマスターによって検出された場合、ワーカーの合計数は pm.max_children を超えることはできません。アイドル状態のワーカーが多すぎる場合)、リソースの占有を避けるために一部のワーカーが強制終了されます。マスターはこれらの 4 つの値を使用してワーカーの数を制御します
3.ondemand: このメソッドは通常、ほとんど使用されません。ワーカー プロセスは起動時に割り当てられず、ワーカー プロセスの総数が pm を超えない場合、リクエストがあった後にマスター プロセスにワーカー プロセスをフォークするように通知されます。ワーカー プロセスは処理が完了してもすぐには終了しません。アイドル時間が pm.process_idle_timeout を超えると終了しますPHP-FPM Event Manager
1.sp[1] パイプライン読み取り可能イベント: このイベントは信号処理のマスター2.fpm_pctl_perform_idle_server_maintenance_heartbeat(): これはプロセス管理実装のメイン イベント。マスターは 1 秒ごとにトリガーされるタイマーを開始します。これは主に動的モードおよびオンデマンド モードでのワーカー管理に使用され、各ワーカー プール内のワーカー プロセスの数を確認し、制御します。このタイマーを通過したワーカーの数
3.fpm_pctl_heartbeat(): このイベントは、ワーカーが 1 つのリクエストを処理するのにかかる最大時間を制限するために使用されます。php-fpm.conf には request_terminate_timeout 設定項目があります。リクエストがこの値を超えると、マスターはこのワーカー プロセスを強制終了するために kill -TERM シグナルを送信します。この設定の単位は秒です。これは、このメカニズムをオフにすることを意味します。 .fpm_pctl_on_socket_accept(): オンデマンド モードのマスターによって監視される新しいリクエストの到着イベント。オンデマンド モードでは、fpm は開始時にワーカーを事前に作成しないため、子プロセスはリクエストがあった場合にのみ生成されます。したがって、リクエストが到着したときにマスタープロセスに通知する必要があります
以上が(PHP7カーネル解析-1) CGIとFastCGIの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック











PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

ファイルのアップロードを行うには、フォーム ヘルパーを使用します。ここではファイルアップロードの例を示します。

CakePHP は、PHP 用のオープンソース フレームワークです。これは、アプリケーションの開発、展開、保守をより簡単にすることを目的としています。 CakePHP は、強力かつ理解しやすい MVC のようなアーキテクチャに基づいています。モデル、ビュー、コントローラー

Visual Studio Code (VS Code とも呼ばれる) は、すべての主要なオペレーティング システムで利用できる無料のソース コード エディター (統合開発環境 (IDE)) です。 多くのプログラミング言語の拡張機能の大規模なコレクションを備えた VS Code は、
