PHP-FPM
Frühe Versionen von PHP hatten keinen integrierten WEB-Server, sondern stellten SAPI (Server API) zur Verfügung ) Verbinden Sie sich mit Dritten. Das mittlerweile sehr beliebte PHP-FPM wickelt die Kommunikation zwischen PHP und WEB-Servern von Drittanbietern über das FastCGI-Protokoll ab. (Empfohlenes Lernen: Swoole-Video-Tutorial )
Zum Beispiel die Kombination von Nginx + PHP-FPM, das auf diese Weise ausgeführte FPM befindet sich im Master/Worker-Modus und startet a Master-Prozess zum Abhören von Nginx-Anfragen und Forks mehrerer Worker-Prozesse zur Bearbeitung der Anfragen. Jeder Worker-Prozess kann nur eine Anfrage bearbeiten. Der Lebenszyklus eines einzelnen Prozesses ist ungefähr wie folgt:
Initialisierungsmodul.
Initialisierungsanfrage. Mit der Anfrage ist hier die Aufforderung an PHP gemeint, Code auszuführen, nicht eine HTTP-Anfrage.
PHP-Skript ausführen.
Anfrage beenden.
Schließen Sie das Modul.
Swoole übernimmt auch den Master/Worker-Modus. Der Unterschied besteht darin, dass der Master-Prozess nur über einen Ereignisgenerator verfügt, der für die Überwachung von Ereignisänderungen des Socket-Handles verantwortlich ist. Worker wird in mehreren Prozessen ausgeführt, empfängt Anforderungen von Reactor-Threads und führt Rückruffunktionen aus (in PHP geschrieben). Der Prozess zum Starten des Master-Prozesses ist ungefähr:
Initialisierungsmodul.
Initialisierungsanfrage. Da Swoole über die CLI ausgeführt werden muss, werden die globalen Variablen von PHP wie $_SERVER, $_POST, $_GET usw. nicht initialisiert, wenn die Anfrage initialisiert wird.
PHP-Skript ausführen. Einschließlich lexikalischer und syntaktischer Analyse, Initialisierung von Variablen, Funktionen, Klassen usw. wechselt der Master in den Hörzustand und beendet den Prozess nicht.
Das Prinzip der Swoole-Beschleunigung
Der Reaktor (Epolls IO-Wiederverwendungsmethode) ist für die Überwachung der Ereignisänderungen des Socket-Handles verantwortlich, um das Problem der hohen Parallelität zu lösen.
Sparen Sie die Zeit der PHP-Code-Initialisierung durch speicherresidente Verwendung. Bei der Verwendung umfangreicher Frameworks ist der Beschleunigungseffekt der Verwendung von Swoole sehr offensichtlich.
Vergleich der Unterschiede
PHP-FPM
Master-Hauptprozess / Worker-Mehrprozessmodus.
Starten Sie den Master und warten Sie auf Anfragen, die von Nginx über das FastCGI-Protokoll übertragen werden.
Jeder Worker-Prozess entspricht nur einer Verbindung, die zur Ausführung des vollständigen PHP-Codes verwendet wird.
Nachdem der PHP-Code ausgeführt wurde, wird der gesamte belegte Speicher zerstört und die nächste Anforderung muss neu initialisiert werden und andere langwierige Vorgänge müssen ausgeführt werden.
Nur für HTTP-Server.
Swoole
Master-Hauptprozess (bestehend aus mehreren Reactor-Threads)/Worker-Multiprozess- (oder Multi-Thread-)Modus
Starten Sie Master, initialisieren Sie den PHP-Code und der Reactor überwacht die Ereignisänderungen des Socket-Handles.
Der Reactor-Hauptthread ist für den Ausgleich der Multithreads verantwortlich, und der Manager-Prozess verwaltet mehrere Worker-Prozesse, einschließlich TaskWorker-Prozesse.
Jeder Worker akzeptiert Anfragen von Reactor und muss nur den PHP-Code im Callback-Funktionsteil ausführen.
Der PHP-Initialisierungscode wird nur einmal ausgeführt, wenn der Master startet. Der Master wechselt in den Abhörzustand und beendet den Prozess nicht.
Es kann nicht nur für HTTP-Server verwendet werden, sondern kann auch eine TCP-Verbindung und eine WebSocket-Verbindung herstellen.
Das obige ist der detaillierte Inhalt vonDer Unterschied zwischen fpm und swoole. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!