10. PHP-FPM-Betriebsmechanismus
FastCGI ist ein Kommunikationsprotokoll zwischen Webservern (wie Nginx, Apache) und Prozessoren (wie PHP). php-fpm ist ein blockierender Single-Thread-Modell-Prozessmanager im PHP-FastCGI-Betriebsmodus. Er verfügt über eine Single-Master- und Multi-Worker-Struktur. Derselbe Worker-Prozess kann jeweils nur eine Anfrage bearbeiten. Nachdem PHP die Anfrage verarbeitet hat, leitet es das analysierte Ergebnis über das FastCGI-Protokoll an den Webserver weiter, und der Webserver gibt es an den Benutzer zurück.
Grundlegende Implementierung
PHP-FPM ist die Implementierung von Fast-CGI, die Prozessverwaltungsfunktionen einschließlich Master- und Worker-Prozessen bereitstellt:
- Master erstellt und überwacht Sockets, forkt mehrere Worker-Prozesse und teilt sie im Speicher Ruft den Status des Workers ab und steuert dann den Worker-Prozess über Signale. Worker nimmt Anfragen frei an. Worker – Anforderungsverarbeitung. Worker-Prozess akzeptiert kontinuierlich Anfragen Nachdem die Analyse abgeschlossen ist, wird mit der Ausführung des PHP-Skripts begonnen und die Anforderung wird nach Abschluss der Ausführung geschlossen. Die Schritte für jeden Worker zum Verarbeiten von Anfragen sind wie folgt:
- Warten auf Anfragen: Der Worker-Prozess ist in fcgi_accept_request() blockiert und wartet auf Anfragen.
Anfrage analysieren: Nachdem die Fastcgi-Anfrage eingegangen ist, wird sie vom Worker empfangen und beginnt dann mit dem Empfangen und Analysieren der Anfragedaten, bis die Anfragedaten vollständig eintreffen. Anforderungsinitialisierung: Führen Sie php_request_startup() aus.
PHP-Skript ausführen.
Anfrage schließen. -
- In der Struktur des Worker-Prozesses gibt es einen Parameter zum Aufzeichnen der aktuellen Phase des Workers fpm_scoreboard_proc_s->request_stage. Während eines Anforderungsprozesses wird dieser Wert auf die folgenden Werte gesetzt:
- FPM_REQUEST_ACCEPTING: Warten auf die Anfragephase.
- FPM_REQUEST_READING_HEADERS: Fastcgi-Anfrage-Header-Phase lesen.
- FPM_REQUEST_INFO: Anforderungsinformationsphase abrufen In dieser Phase werden die angeforderte Methode, die Abfragezeichenfolge, die Anforderungs-URI und andere Informationen in der fpm_scoreboard_proc_s-Struktur jedes Arbeitsprozesses gespeichert.
FPM_REQUEST_EXECUTING: PHP-Skriptphase ausführen.
FPM_REQUEST_END: Nicht verwendet. - FPM_REQUEST_FINISHED: Anforderungsverarbeitung abgeschlossen.
-
- master – Prozessverwaltung
-
- master kehrt nach dem Aufruf von fpm_run() nicht mehr zurück, sondern tritt in eine Ereignisschleife ein. Danach wird der Master immer mehrere Ereignisse verarbeiten. Wir haben zunächst die drei verschiedenen Prozessverwaltungsmethoden von Fpm vorgestellt. Welcher Modus verwendet werden soll, kann über pm in der conf-Konfiguration angegeben werden, zum Beispiel pm=dynamic.
- Statischer Modus (statisch): Diese Methode ist relativ einfach. Beim Start gibt der Master eine entsprechende Anzahl von Arbeitsprozessen gemäß der Konfiguration von pm.max_children aus, d. h. die Anzahl der Arbeitsprozesse ist festgelegt.
Dynamischer Modus (dynamisch): Dieser Modus wird häufiger verwendet. Wenn Fpm startet, wird eine bestimmte Anzahl von Workern gemäß der Konfiguration von pm.start_servers initialisiert. Wenn der Master während des Betriebs feststellt, dass die Anzahl der inaktiven Worker geringer ist als die konfigurierte Anzahl von pm.min_spare_servers (was darauf hinweist, dass zu viele Anforderungen vorliegen und die Worker diese nicht verarbeiten können), wird der Worker-Prozess gegabelt, jedoch die Gesamtzahl Anzahl der Arbeitnehmer darf pm.max_children nicht überschreiten. Wenn der Master feststellt, dass die Anzahl der inaktiven Arbeiter pm.max_spare_servers überschreitet (was darauf hinweist, dass zu viele inaktive Arbeiter vorhanden sind), werden einige Arbeiter getötet, um zu vermeiden, dass zu viele Ressourcen belegt werden. Der Master verwendet diese vier Werte, um die Anzahl dynamisch zu steuern der Arbeiter. OnDemand-Modus (OnDemand): Dieser Modus ist dem herkömmlichen CGI sehr ähnlich. Er weist beim Start keine Worker-Prozesse zu. Er benachrichtigt den Master-Prozess, um den Worker-Prozess zu forken, d Untergeordneter Prozess, nachdem die Anfrage zur Verarbeitung eingegangen ist. Die Gesamtzahl der Worker überschreitet nicht pm.max_children. Nach Abschluss der Verarbeitung wird der Worker-Prozess nicht sofort beendet. Er wird beendet, wenn die Leerlaufzeit pm.process_idle_timeout überschreitet.
Der Master-Prozess tritt in die Ereignisschleife fpm_event_loop() ein. Bei dieser Methode durchläuft der Master mehrere vom Master registrierte E/A- und Timer-Ereignisse. Wenn ein Ereignis ausgelöst wird, wird der spezifische Handler zur Verarbeitung zurückgerufen.
-
- 11. Speicherzuweisungsprozess
- Bewerben Sie sich vorab für ein Stück Speicher und verwalten Sie es intern. Wenn die Anwendung Speicher beantragt, wird sie ab diesem Teil angewendet, und wenn sie freigegeben wird, wird sie freigegeben Zurück zur Speicherverwaltung. Dieses Design kann den zusätzlichen Leistungsverbrauch des Betriebssystems vermeiden, der durch die Anwendung und die Freigabe von kleinem Speicher verursacht wird.
12. Implementierung des PHP-Arrays
13. Abhängigkeitsinjektion
Konzept: bezieht sich auf die Art und Weise, wie andere Dienste, von denen der Dienst abhängt, nicht vom Dienst selbst erstellt, sondern von außen übergeben werden.
Wie wird es erreicht? Antwort: Im Allgemeinen erfolgt die Implementierung mithilfe von Reflexion. Welches Problem kann
lösen? Antwort: Reduzieren Sie die Kopplung zwischen Dienstmodulen. Beim Schreiben von Code müssen Sie die spezifische Implementierung externer Dienste nicht berücksichtigen. Sie müssen nur den Dienst basierend auf der Schnittstelle verwenden.
14. Objektorientiert
Konzept: Objektorientiert ist eine Entwurfsmethode für Programme, die dazu beiträgt, die Wiederverwendbarkeit von Programmen zu verbessern und die Programmstruktur klarer zu machen.
Hauptmerkmale: Kapselung, Vererbung, Polymorphismus.
Fünf Grundprinzipien: Prinzip der Einzelverantwortung; Prinzip der offenen und geschlossenen Schnittstelle;
Dieser Artikel wurde zuerst auf der Website LearnKu.com veröffentlicht.
Verwandte Empfehlungen: „Zusammenfassung der PHP-Interviewfragen 2021 (Sammlung)“