Heim >Backend-Entwicklung >PHP-Problem >Wie funktioniert PHPFPM?
php-fpm ist eine Master- (Haupt-)/Worker- (untergeordnete) Multiprozessarchitektur, die dem Nginx-Designstil etwas ähnelt. Der Master-Prozess ist hauptsächlich für die Initialisierung der CGI- und PHP-Umgebung, die Ereignisüberwachung, den Unterprozessstatus usw. verantwortlich, und der Worker-Prozess ist für die Verarbeitung von PHP-Anfragen verantwortlich.
Funktionsprinzip
php-fpm ist mit einer Master/Worker-Architektur konzipiert Die Vorderseite ist einfach. Beschreiben Sie die Funktionen der Master- und Worker-Prozessmodule. Die Funktionsweise dieser beiden Module wird im Folgenden ausführlich erläutert.
Master-Prozess
Der Master-Prozess-Workflow ist in 4 Phasen unterteilt, wie unten dargestellt:
1 . CGI-Initialisierungsphase: Rufen Sie die Funktionen fcgi_init() bzw. sapi_startup() auf, registrieren Sie Prozesssignale und initialisieren Sie die globale Variable sapi_globals.
2. PHP-Umgebungsinitialisierungsphase: ausgelöst durch cgi_sapi_module.startup. Die Funktion php_cgi_startup wird tatsächlich aufgerufen und php_cgi_startup ruft intern php_module_startup zur Ausführung auf.
Hauptfunktionen von php_module_startup:
a), PHP-Konfiguration laden und analysieren
b), PHP-Modul laden und in der Funktionssymboltabelle (function_table) aufzeichnen;
c), Zend-Erweiterung laden;
d), deaktivierte Funktionen und Klassenbibliothekskonfiguration festlegen; 3. PHP-FPM-Initialisierungsphase: Führen Sie die Funktion fpm_init () aus. Verantwortlich für das Parsen der Dateikonfiguration php-fpm.conf, das Abrufen prozessbezogener Parameter (die maximale Anzahl von Dateien, die vom Prozess geöffnet werden dürfen usw.), das Initialisieren des Prozesspools und des Ereignismodells sowie andere Vorgänge.
4. PHP-FPM-Laufphase: Führen Sie die Funktion fpm_run() aus und der Hauptprozess wird nach der Ausführung blockiert. Diese Phase ist in zwei Teile unterteilt: den untergeordneten Fork-Prozess und das Schleifenereignis.
Der untergeordnete Teil des Fork-Prozesses wird von der Funktion fpm_children_create_initial verwaltet (Hinweis: Der OnDemand-Modus wird in der Funktion fpm_pctl_on_socket_accept erstellt).
Der Schleifenereignisteil wird durch die Funktion fpm_event_loop verarbeitet, die eine Endlosschleife im Inneren darstellt und für die Sammlung von Ereignissen verantwortlich ist.
Worker-ProzessDer Worker-Prozess ist in drei Phasen unterteilt: Empfang von Kundenanfragen, Bearbeitung von Anfragen und Abschluss der Anfrage.
1. Client-Anfrage empfangen: Führen Sie die Funktion fcgi_accept_request aus, die die Client-Anfrage intern durch Aufruf der Accept-Funktion erhält.//请求锁 FCGI_LOCK(req->listen_socket); req->fd = accept(listen_socket, (struct sockaddr *)&sa, &len); //释放锁 FCGI_UNLOCK(req->listen_socket);Aus dem obigen Code können Sie erkennen, dass vor dem Akzeptieren eine Anforderungssperroperation erfolgt. Dieses Design dient dazu, das „Schock“-Phänomen von Anforderungen zu vermeiden. Dies ist natürlich eine optionale Option und die Funktion kann deaktiviert werden.
2. Anforderungsverarbeitungsphase: Rufen Sie zunächst fpm_request_info bzw. php_request_startup auf, um den Anforderungsinhalt abzurufen und globale Variablen zu registrieren ($_GET, $_POST, $_SERVER, $_ENV, $_FILES); rufen Sie dann php_fopen_primary_script auf, um darauf zuzugreifen Gemäß den Anforderungsinformationen wird die Skriptdatei schließlich zur Ausführung an php_execute_script übergeben. php_execute_script ruft intern die Methode zend_execute_scripts auf, um das Skript zur Verarbeitung an die Zend-Engine zu übergeben.
3. Endphase der Anfrage: Führen Sie die Funktion php_request_shutdown aus. Zu diesem Zeitpunkt werden die von register_shutdown_function registrierten Funktionen und die Methode __destruct() zurückgerufen, um Antwortinhalte zu senden, Speicher freizugeben und andere Vorgänge durchzuführen.
Zusammenfassungphp-fpm übernimmt das Master/Worker-Architekturdesign. Der Masterprozess ist für die Initialisierung und Ereignisüberwachung öffentlicher CGI- und PHP-Umgebungen verantwortlich. Der Worker-Prozess ist für die Anforderungsverarbeitungsfunktionen verantwortlich. Wenn der Arbeitsprozess die Anforderung verarbeitet, muss die PHP-Laufumgebung nicht erneut initialisiert werden, was einer der Gründe für die hervorragende Leistung von PHP-FPM ist. Weitere PHP-Kenntnisse finden Sie auf der
chinesischen PHP-Website!
Das obige ist der detaillierte Inhalt vonWie funktioniert PHPFPM?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!