Heim  >  Artikel  >  Backend-Entwicklung  >  Vergleich von PHP-FPM und Swoole

Vergleich von PHP-FPM und Swoole

藏色散人
藏色散人nach vorne
2020-01-20 13:15:593970Durchsuche

Ich habe vor ein paar Tagen ein paar Artikel über Swoole gesehen und bin heute hier, um bei dem Spaß dabei zu sein. Mein Niveau ist begrenzt und mein Verständnis für Details ist möglicherweise nicht ausreichend. Ich freue mich über jeden, der mir beim Hinzufügen und Korrigieren hilft.

PHP-FPM

Frühe Versionen von PHP hatten keinen integrierten WEB-Server, sondern stellten SAPI (Server API) für die Verbindung mit Drittanbietern bereit. Das mittlerweile sehr beliebte PHP-FPM wickelt die Kommunikation zwischen PHP und WEB-Servern von Drittanbietern über das FastCGI-Protokoll ab. Beispielsweise ist die Kombination von Nginx + PHP-FPM, wobei FPM auf diese Weise ausgeführt wird, der Master/Worker-Modus, bei dem ein Master-Prozess gestartet wird, um Anforderungen von Nginx zu überwachen, und dann mehrere Worker-Prozesse geforkt werden, um die Anforderungen zu bearbeiten. Jeder Worker-Prozess kann nur eine Anfrage bearbeiten. Der Lebenszyklus eines einzelnen Prozesses ist ungefähr wie folgt:

1.

2. Initialisierungsanfrage. Mit der Anfrage ist hier gemeint, dass PHP aufgefordert wird, Code auszuführen, und nicht eine HTTP-Anfrage.

3. PHP-Skript ausführen.

4. Beenden Sie die Anfrage.

5. Schließen Sie das Modul.

Das Multiprozessmodell basiert auf der Anzahl der Prozesse, um Parallelitätsprobleme zu lösen. Ein Prozess kann nur eine Verbindung verarbeiten. Wenn eine große Anzahl von Prozessen gestartet wird, kann der Prozessplanungsverbrauch Dutzende oder sogar 100 % ausmachen. B. das C10K-Problem, reicht das Multiprozessmodell nicht aus.

Swoole

Swoole verwendet auch den Master/Worker-Modus. Der Unterschied besteht darin, dass der Master-Prozess mehrere Reaktor-Threads hat und der Master nur ein verantwortlicher Ereignisgenerator ist zum Abhören der Socket-Handle-Änderungen in Ereignissen. Der Worker wird in mehreren Prozessen ausgeführt, empfängt Anforderungen von Reactor-Threads und führt Rückruffunktionen (in PHP geschrieben) aus. Der Prozess zum Starten des Master-Prozesses ist ungefähr:

1. Initialisieren Sie das Modul.

2. 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.

3. 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.

Prinzip der Swoole-Beschleunigung

● Reactor (Epolls IO-Wiederverwendungsmethode) ist für die Überwachung von Ereignisänderungen von Socket-Handles verantwortlich, um Probleme mit hoher Parallelität zu lösen.

● Sparen Sie Zeit bei der PHP-Code-Initialisierung durch Speicherresidentität. 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 Anfrage erfordert eine Neuinitialisierung und andere langwierige Vorgänge.

● Nur für HTTP-Server.

Swoole

● Master-Hauptprozess (bestehend aus mehreren Reactor-Threads)/Worker-Multiprozess- (oder Multi-Thread-)Modus

● Start Master initialisiert den PHP-Code und der Reactor überwacht die Ereignisänderungen des Socket-Handles.

● Der Hauptthread von Reactor ist für den Ausgleich von 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.

● Kann nicht nur für HTTP-Server verwendet werden, sondern kann auch TCP-Verbindungen und WebSocket-Verbindungen herstellen.

Das Obige dient hauptsächlich dem Vergleich der wichtigsten Betriebssysteme. Die aufgeführten Unterschiede sind nur die Punkte, die mir im Moment einfallen. Bitte helfen Sie mir, diese hinzuzufügen

Das obige ist der detaillierte Inhalt vonVergleich von PHP-FPM und Swoole. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:learnku.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen