ホームページ >バックエンド開発 >PHPの問題 >phpfpmはどのように機能しますか?

phpfpmはどのように機能しますか?

青灯夜游
青灯夜游オリジナル
2019-10-16 13:54:143745ブラウズ

php-fpm はマスター (メイン)/ワーカー (子) のマルチプロセス アーキテクチャであり、nginx の設計スタイルに似ています。マスタープロセスは主にCGIやPHP環境の初期化、イベント監視、サブプロセスのステータスなどを担当し、ワーカープロセスはPHPリクエストの処理を担当します。

phpfpmはどのように機能しますか?

#動作原理

php-fpm は、フロント部分にマスター/ワーカー アーキテクチャ設計を採用しています。マスタープロセスモジュールとワーカープロセスモジュールの機能を簡単に説明します。これら 2 つのモジュールの動作原理については、以下で詳しく説明します。

マスター プロセス

マスター プロセスのワークフローは、以下に示すように 4 つの段階に分かれています:

phpfpmはどのように機能しますか?

1 . cgi 初期化フェーズ: fcgi_init() 関数と sapi_startup() 関数をそれぞれ呼び出し、プロセス信号を登録し、sapi_globals グローバル変数を初期化します。

2. PHP 環境の初期化フェーズ: cgi_sapi_module.startup によってトリガーされます。実際には php_cgi_startup 関数が呼び出され、php_cgi_startup が内部で php_module_startup を呼び出して実行されます。

php_module_startup の主な関数:

a)、php 設定のロードと解析;

b)、php モジュールをロードし、関数シンボル テーブル (function_table) に記録します。

c)、zend 拡張機能のロード;

d)、無効な関数とクラス ライブラリ構成の設定;

e)、レジスタ メモリ回復メソッド;

3、php -fpm 初期化フェーズ: fpm_init() 関数を実行します。 php-fpm.conf ファイル構成の解析、プロセス関連パラメータ (プロセスが開くことができるファイルの最大数など) の取得、プロセス プールとイベント モデルの初期化、およびその他の操作を担当します。

4. php-fpm 実行フェーズ: fpm_run() 関数を実行すると、実行後にメイン プロセスがブロックされます。このフェーズは、フォーク子プロセスとループ イベントの 2 つの部分に分かれています。

フォークの子プロセス部分は、fpm_children_create_initial 関数によって処理されます (注: オンデマンド モードは fpm_pctl_on_socket_accept 関数で作成されます)。

ループ イベント部分は fpm_event_loop 関数を通じて処理されます。この関数は内部の無限ループであり、イベントの収集を担当します。

ワーカー プロセス

ワーカー プロセスは、クライアント リクエストの受信、リクエストの処理、リクエストの完了の 3 つの段階に分かれています。

phpfpmはどのように機能しますか?

#1. クライアント リクエストの受信: fcgi_accept_request 関数を実行します。この関数は、accept 関数を呼び出してクライアント リクエストを内部的に取得します。

//请求锁
FCGI_LOCK(req->listen_socket);
req->fd = accept(listen_socket, (struct sockaddr *)&sa, &len);
//释放锁
FCGI_UNLOCK(req->listen_socket);

上記のコードを見ると、リクエストを受け入れる前にリクエストのロック操作があることがわかりますが、これはリクエストにおける「ショック」現象を回避するための設計です。もちろん、これはオプションであり、この機能を無効にすることもできます。

2. リクエスト処理段階: まず、fpm_request_info と php_request_startup をそれぞれ呼び出してリクエストの内容を取得し、グローバル変数 ($_GET、$_POST、$_SERVER、$_ENV、$_FILES) を登録し、次に php_fopen_primary_script を呼び出してアクセスします。リクエスト情報に従ってスクリプト ファイルが作成され、最終的に php_execute_script に渡されて実行されます。 php_execute_script は内部で zend_execute_scripts メソッドを呼び出し、スクリプトを zend エンジンに渡して処理します。

3. リクエスト終了ステージ: php_request_shutdown 関数を実行します。このとき、登録した関数や register_shutdown_function の __destruct() メソッドをコールバックし、応答内容の送信やメモリの解放などを行います。

概要

php-fpm はマスター/ワーカー アーキテクチャ設計を採用しており、マスター プロセスは CGI および PHP パブリック環境の初期化とイベント監視操作を担当します。ワーカー プロセスはリクエスト処理機能を担当します。ワーカー プロセスがリクエストを処理するときに、PHP 実行環境を再度初期化する必要がありません。これが、php-fpm の優れたパフォーマンスの理由の 1 つです。

PHP 関連の知識について詳しくは、

php中文网 をご覧ください。

以上がphpfpmはどのように機能しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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