php_module_shutdown() |
プロセス終了時に実行 |
| ##
10. php-fpm の動作仕組み
FastCGI は、Web サーバー (Nginx、Apache など) と処理プログラム (PHP など) の間の通信プロトコルです。 a アプリケーション層の通信プロトコル。 php-fpm は、PHP FastCGI オペレーティング モードのブロッキング シングル スレッド モデル プロセス マネージャーです。単一のマスターとマルチワーカー構造を持っています。同じワーカー プロセスは一度に 1 つのリクエストのみを処理できます。 PHP はリクエストを処理した後、解析結果を FastCGI プロトコルを通じて Web サーバーに転送し、Web サーバーはそれをユーザーに返します。
#基本実装
PHP-FPM は fast-cgi の実装であり、マスター プロセスやワーカー プロセスなどのプロセス管理機能を提供します。
Master はソケットを作成および監視し、複数のワーカー プロセスをフォークし、共有メモリを通じてワーカーのステータスを取得し、シグナルを通じてワーカー プロセスを制御します - ワーカーはリクエストを自由に受け入れます
- ##ワーカー—リクエストの処理
#ワーカー プロセスは継続的にリクエストを受け付けます。リクエストが到着すると、FastCGI プロトコルのデータを読み取って解析します。解析が完了すると、PHP スクリプトが実行され、リクエストは実行完了後に閉じられます。各ワーカーがリクエストを処理する手順は次のとおりです。
リクエストの待機: ワーカー プロセスは、リクエストを待機している fcgi_accept_request() でブロックされます。
リクエストを解析する: fastcgi リクエストが到着すると、それはワーカーによって受信され、リクエスト データが完全に到着するまでリクエスト データの受信と解析が開始されます。 - リクエストの初期化: php_request_startup() を実行します。
- PHP スクリプトを実行します。
- リクエストを閉じます。
-
- ワーカー プロセスの構造には、ワーカーが現在いるステージ fpm_scoreboard_proc_s->request_stage を記録するパラメーターがあります。リクエスト中に、この値は次の値に設定されます。
FPM_REQUEST_ACCEPTING: リクエストフェーズを待機しています。
FPM_REQUEST_READING_HEADERS: fastcgi リクエスト ヘッダー フェーズを読み取ります。 - FPM_REQUEST_INFO: リクエスト情報の取得フェーズ。このフェーズでは、リクエストされたメソッド、クエリ文字列、リクエスト URI およびその他の情報が各ワーカー プロセスの fpm_scoreboard_proc_s 構造体に保存されます。この操作はマスター プロセスでも操作されるため、ロックが必要です。この構造。
- FPM_REQUEST_EXECUTING: PHP スクリプト フェーズを実行します。
- FPM_REQUEST_END: 使用されません。
- FPM_REQUEST_FINISHED: リクエストの処理が完了しました。
-
- master – プロセス管理
master は fpm_run() を呼び出した後に戻らなくなり、イベント ループに入ります。それ以降、master は常にいくつかのイベントが処理されます。これらのイベントを詳細に分析する前に、まず Fpm の 3 つの異なるプロセス管理方法を紹介します。使用する特定のモードは、conf 設定の pm を通じて (pm=dynamic など) 指定できます。
静的モード (静的): この方法は比較的単純です。起動時に、マスターは pm.max_children 構成に従って、対応する数のワーカー プロセス (ワーカー プロセスの数) をフォークアウトします。固定されています。
動的モード (動的): このモードはより一般的に使用され、Fpm が開始されると、pm.start_servers 構成に従って特定の数のワーカーが初期化されます。動作中に、アイドル状態のワーカーの数が設定された pm.min_spare_servers の数よりも少ないことをマスターが検出した場合 (リクエストが多すぎてワーカーが処理できないことを示します)、マスターはワーカー プロセスをフォークしますが、総数はワーカーの数は pm.max_children を超えることはできません。マスターがアイドル状態のワーカーの数が pm.max_spare_servers を超えていることを検出した場合 (アイドル状態のワーカーが多すぎることを示します)、リソースの占有が多すぎることを避けるために一部のワーカーを強制終了します。マスターはこれら 4 つの値を使用して数を動的に制御します労働者の。 - オンデマンド モード (オンデマンド): このモードは従来の CGI に非常に似ています。起動時にワーカー プロセスを割り当てません。リクエストがあると、ワーカー プロセスをフォークするようにマスター プロセスに通知します。リクエストが到着したら、子プロセスをフォークして処理します。ワーカーの総数が pm.max_children を超えていないこと ワーカープロセスは処理完了後すぐに終了せず、アイドル時間が pm.process_idle_timeout を超えた時点で終了します。
-
- マスター プロセスは、fpm_event_loop() イベント ループに入ります。このメソッドでは、マスターは、マスターによって登録されたいくつかの IO イベントとタイマー イベントを周期的に処理します。イベントがトリガーされると、特定のハンドラーが実行されます。処理のために呼び戻されました。
11. メモリ割り当てプロセス
12. PHP 配列の実装
13. 依存関係の注入
概念: サービスが依存する他のサービスがサービス自体によって作成されるのではなく、外部から渡される方法を指します。
それを達成するにはどうすればよいですか?回答: 一般に、リフレクションを使用して実装されます。
どのような問題を解決できますか?回答: サービス モジュール間の結合を減らします。コードを記述するときに、外部サービスの特定の実装を考慮する必要はありません。インターフェイスに基づいてサービスを使用するだけで済みます。
14. オブジェクト指向
概念: オブジェクト指向はプログラムの設計手法であり、プログラムの再利用性を向上させ、プログラムの構造をより明確にします。
主な機能: カプセル化、継承、ポリモーフィズム。
5 つの基本原則: 単一責任の原則、オープンとクローズの原則、置換の原則、依存性の原則、インターフェイス分離の原則。
この記事は、LearnKu.com Web サイトに初めて掲載されました。
関連おすすめ: 「2021 PHP 面接質問まとめ (集)」