


Detaillierte Erläuterung der PHP-Thread-Prozesse und gleichzeitigen Instanzen
Prozess
Was ist ein Prozess? Ein Prozess ist ein ausführendes Programm; ein Prozess ist eine Instanz eines Programms, das auf einem Computer ausgeführt wird; ein Prozess ist eine Entität, die einem Prozessor zugewiesen und von diesem ausgeführt werden kann. Ein Prozess umfasst im Allgemeinen einen Befehlssatz und einen Systemressourcensatz. Der Befehlssatz bezieht sich hier auf den Programmcode, und der Systemressourcensatz bezieht sich hier auf E/A, CPU, Speicher usw. Zusammenfassend können wir auch verstehen, dass ein Prozess eine laufende Aktivität eines Programms mit bestimmten unabhängigen Funktionen für eine bestimmte Datensammlung ist. Ein Prozess ist eine unabhängige Einheit für die Ressourcenzuweisung und -planung im System.
Wenn ein Prozess ausgeführt wird, kann der Prozess eindeutig dargestellt werden, bestehend aus den folgenden Elementen:
Prozessdeskriptor: die eindeutige Kennung des Prozesses, verwendet mit „Andere“. Prozesse werden unterschieden. Sie heißt unter Linux Prozess-ID und wird während des Systemaufrufs generiert. Was wir jedoch über getpid zurückgeben, ist nicht sein PID-Feld, sondern seine Thread-Gruppennummer tgid.
Prozessstatus: Die Zustände, die wir oft als Suspend, Running usw. bezeichnen, stellen den aktuellen Zustand dar.
Priorität: bezogen auf die Ausführungsplanung zwischen Prozessen, relativ zu anderen Prozessen.
Programmzähler: Die Adresse des nächsten Befehls, der im Programm ausgeführt werden soll. Diese Adresse ist die Speicheradresse im Kernel- oder Benutzerspeicherbereich.
Speicherzeiger: einschließlich Zeiger auf Programmcode und prozessbezogene Daten sowie Zeiger auf gemeinsam genutzte Speicherblöcke mit anderen Prozessen.
Kontextdaten: Die Daten des Prozessorregisters, wenn der Prozess ausgeführt wird.
E/A-Statusinformationen: einschließlich expliziter E/A-Anfragen, den Prozessen zugewiesenen E/A-Geräten usw.
Buchhaltungsinformationen: kann die gesamte Prozessorzeit, die Gesamtzahl der verwendeten Uhren, Zeitlimits usw. umfassen.
Die oben genannten Elemente werden in einer Datenstruktur platziert, die als Prozesssteuerungsblock bezeichnet wird. Der Prozesssteuerungsblock ist eine Struktur, die es dem Betriebssystem ermöglicht, mehrere Prozesse zu unterstützen und Mehrfachverarbeitung bereitzustellen. Wenn das Betriebssystem den Prozess wechselt, führt es zwei Schritte aus: Der eine besteht darin, den Prozess im aktuellen Prozessor zu unterbrechen, und der andere darin, den nächsten Prozess auszuführen. Unabhängig von Interrupt oder Ausführung ändern sich der Programmzähler, die Kontextdaten und der Prozessstatus im Prozesssteuerungsblock. Wenn der Prozess unterbrochen wird, speichert das Betriebssystem den Programmzähler und das Prozessorregister (entsprechend den Kontextdaten im Prozesssteuerungsblock) an der entsprechenden Stelle im Prozesssteuerungsblock. Der Prozessstatus ändert sich ebenfalls und tritt möglicherweise ein Es kann in einen Blockierungszustand übergehen oder in den Bereitschaftszustand übergehen. Wenn der nächste Prozess ausgeführt wird, versetzt das Betriebssystem den nächsten Prozess gemäß den Regeln in den laufenden Zustand und lädt die Programmkontextdaten und den Programmzähler des auszuführenden Prozesses.
Threads
Ein Prozess besteht aus zwei charakteristischen Teilen: Ressourcenbesitz und Planung der Ausführung. Ressourceneigentum bedeutet, dass der Prozess den Speicherplatz, die E/A und andere Ressourcen umfasst, die für die Ausführung des Prozesses erforderlich sind. Die Planung der Ausführung bezieht sich auf den Ausführungspfad in der Mitte der Prozessausführung oder den Befehlsausführungsfluss des Programms. Diese beiden Funktionsteile können nach der Trennung getrennt werden. Der Teil mit Dateneigentum wird normalerweise als Prozess bezeichnet, und der Teil mit dem verteilbaren Teil des Ausführungscodes wird als Thread oder Lightweight-Prozess bezeichnet.
Threads haben die Bedeutung von „Ausführungshinweisen“, und der Prozess wird als Ressourceneigentümer in einer Multithread-Umgebung definiert, in der weiterhin der Prozesssteuerungsblock des Prozesses gespeichert wird. Die Struktur von Threads unterscheidet sich von der von Prozessen. Jeder Thread umfasst:
Thread-Status: Der aktuelle Status des Threads.
Ein Ausführungsstapel
Privater Datenbereich: statischer Speicherplatz für lokale Variablen jedes Threads
Registersatz: Speichert einen Zustand des Prozessors
Jeder Prozess verfügt über einen Prozesssteuerungsblock und einen Benutzeradressraum, und jeder Thread verfügt über einen unabhängigen Stapel und Unabhängige Steuerblöcke verfügen über einen eigenen unabhängigen Ausführungskontext. Seine Struktur ist in Abbildung 8.1 dargestellt.
Abbildung 8.1 Prozessmodelldiagramm
Threads unterscheiden sich etwas von Prozessen während der Ausführung. Jeder unabhängige Thread verfügt über einen Einstiegspunkt für die Programmausführung, eine sequentielle Ausführungssequenz und einen Ausstiegspunkt für das Programm. Threads können jedoch nicht unabhängig ausgeführt werden und müssen im Prozess vorhanden sein, und der Prozess bietet die Ausführungskontrolle für mehrere Threads. Aus logischer Sicht bedeutet Multithreading, dass in einem Prozess mehrere Ausführungsteile gleichzeitig ausgeführt werden können. Zu diesem Zeitpunkt ist der Prozess selbst nicht die grundlegende laufende Einheit, sondern der Thread-Container.
Der Vorteil von Threads gegenüber Prozessen besteht darin, dass sie schneller sind, unabhängig davon, ob sie zwischen Threads wechseln oder Daten oder Kommunikation zwischen Threads austauschen von Prozessen.
Parallelität und Parallelität
Parallelität, auch Koexistenz genannt, bezieht sich auf die Fähigkeit, mehrere gleichzeitige Aktivitäten zu bewältigen, die nicht unbedingt erforderlich sind Das Gleiche passiert immer. Moderne Computersysteme können beispielsweise mehrere Programme gleichzeitig in Form von Prozessen in den Speicher laden und durch Zeitmultiplex des Prozessors das Gefühl vermitteln, gleichzeitig auf einem Prozessor zu laufen.
Parallel bezieht sich auf zwei gleichzeitig auftretende Ereignisse, was Parallelität bedeutet, aber Parallelität ist nicht unbedingt parallel.
Der Unterschied zwischen Parallelität und Parallelität besteht darin, dass ein Prozessor mehrere Aufgaben gleichzeitig verarbeitet und mehrere Prozessoren oder Mehrkernprozessoren mehrere verschiedene Aufgaben gleichzeitig verarbeiten. Ersteres ist logische Gleichzeitigkeit, während letzteres physikalische Gleichzeitigkeit ist.
Verschiedene Parallelitätsmodelle von PHP
Da es zwei Modelle gibt, welches verwendet PHP? Die Antwort ist, dass sie alle unterstützt werden, was bedeutet, dass PHP das Multithread-Modell unterstützt. In Multithread-Situationen müssen normalerweise die Probleme der Ressourcenfreigabe und -isolation gelöst werden. PHP selbst ist threadsicher.
Das spezifische Modell hängt davon ab, welche SAPI verwendet wird. Beispielsweise kann in Apache das Multi-Thread-Modell oder das Multi-Prozess-Modell verwendet werden. Und php-fpm verwendet das Multiprozessmodell.
Die derzeit empfohlene Methode ist die Verwendung des PHP-FPM-Modells, da dieses Modell viele Vorteile für PHP bietet:
Die Speicherfreigabe ist bei der Verwendung einfach Beim Multiprozessmodell kann der Prozess durch Beenden leicht Speicher freigeben. Da PHP über viele Erweiterungen verfügt, kann es zu Speicherlecks kommen, wenn Sie nicht vorsichtig sind und das Problem einfach durch Beenden des Prozesses lösen.
Starke Disaster-Recovery-Fähigkeit: Erweiterungen oder PHP können Segmentierungsfehler verursachen. Wenn es sich um ein Einzelprozess-Multithread-Modell handelt, bleibt das gesamte PHP hängen. Dies wirkt sich auf den Dienst aus. Wenn mehrere Prozesse vorhanden sind, hat der Tod eines bestimmten Prozesses keine Auswirkungen auf den gesamten Dienst.
Mehrere Prozesse haben die Vorteile mehrerer Prozesse, und Multithreading hat auch die Vorteile von Multithreading. Beispielsweise wählt HHVM ein Multithreading-Modell. Der größte Vorteil des Multithreading-Modells ist die Bequemlichkeit des Informationsaustauschs und der Kommunikation, da Zeiger direkt im selben Prozessraum verwendet werden können.
Zum Beispiel verwenden das Opcode-Cache-Tool in PHP, APC, Opcache usw. den gemeinsam genutzten Speicher. In HHVM besteht keine Notwendigkeit, den gemeinsam genutzten Speicher zu verwenden Die Datenstruktur ist aufgrund des Zeigerproblems kompliziert. Die Datenstruktur in C/C++ kann in Multithread-Situationen gemeinsam genutzt werden. Dies ist auch hilfreich für die Verbesserung der Effizienz.
Es gibt einen weiteren offensichtlichen Modellunterschied zwischen Multi-Processing und Multi-Threading: die Logik bei der Verarbeitung von Anfragen.
Bei Multiprozessen ist es schwierig, die FD-Verbindung prozessübergreifend zu übertragen. Viele Prozesse verwenden normalerweise listen()
im übergeordneten Prozess und dann accept()
in jedem untergeordneten Prozess, um einen Lastausgleich zu erreichen. Bei einem solchen Modell kann es zu einem Herdenproblem kommen.
Im Multithreading-Modell kann ein unabhängiger Thread verwendet werden, um die Anfrage anzunehmen und sie dann an jeden Arbeitsthread weiterzuleiten.
Verwandte Empfehlungen:
Detaillierte Erläuterung von Single-Threaded-JS-Ausführungsproblemen
PHPs Unterstützung und Verwendung von Multithread-Programmierung
Ein Fall der Implementierung der PHP-Multithreading-Klasse
Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der PHP-Thread-Prozesse und gleichzeitigen Instanzen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen





PHP 8.4 bringt mehrere neue Funktionen, Sicherheitsverbesserungen und Leistungsverbesserungen mit einer beträchtlichen Menge an veralteten und entfernten Funktionen. In dieser Anleitung wird erklärt, wie Sie PHP 8.4 installieren oder auf PHP 8.4 auf Ubuntu, Debian oder deren Derivaten aktualisieren. Obwohl es möglich ist, PHP aus dem Quellcode zu kompilieren, ist die Installation aus einem APT-Repository wie unten erläutert oft schneller und sicherer, da diese Repositorys in Zukunft die neuesten Fehlerbehebungen und Sicherheitsupdates bereitstellen.

Wenn Sie ein erfahrener PHP-Entwickler sind, haben Sie möglicherweise das Gefühl, dass Sie dort waren und dies bereits getan haben. Sie haben eine beträchtliche Anzahl von Anwendungen entwickelt, Millionen von Codezeilen debuggt und eine Reihe von Skripten optimiert, um op zu erreichen

Visual Studio Code, auch bekannt als VS Code, ist ein kostenloser Quellcode-Editor – oder eine integrierte Entwicklungsumgebung (IDE) –, die für alle gängigen Betriebssysteme verfügbar ist. Mit einer großen Sammlung von Erweiterungen für viele Programmiersprachen kann VS Code c

JWT ist ein offener Standard, der auf JSON basiert und zur sicheren Übertragung von Informationen zwischen Parteien verwendet wird, hauptsächlich für die Identitätsauthentifizierung und den Informationsaustausch. 1. JWT besteht aus drei Teilen: Header, Nutzlast und Signatur. 2. Das Arbeitsprinzip von JWT enthält drei Schritte: Generierung von JWT, Überprüfung von JWT und Parsingnayload. 3. Bei Verwendung von JWT zur Authentifizierung in PHP kann JWT generiert und überprüft werden, und die Funktionen und Berechtigungsinformationen der Benutzer können in die erweiterte Verwendung aufgenommen werden. 4. Häufige Fehler sind Signaturüberprüfungsfehler, Token -Ablauf und übergroße Nutzlast. Zu Debugging -Fähigkeiten gehört die Verwendung von Debugging -Tools und Protokollierung. 5. Leistungsoptimierung und Best Practices umfassen die Verwendung geeigneter Signaturalgorithmen, das Einstellen von Gültigkeitsperioden angemessen.

Dieses Tutorial zeigt, wie XML -Dokumente mit PHP effizient verarbeitet werden. XML (Extensible Markup-Sprache) ist eine vielseitige textbasierte Markup-Sprache, die sowohl für die Lesbarkeit des Menschen als auch für die Analyse von Maschinen entwickelt wurde. Es wird üblicherweise für die Datenspeicherung ein verwendet und wird häufig verwendet

Eine Zeichenfolge ist eine Folge von Zeichen, einschließlich Buchstaben, Zahlen und Symbolen. In diesem Tutorial wird lernen, wie Sie die Anzahl der Vokale in einer bestimmten Zeichenfolge in PHP unter Verwendung verschiedener Methoden berechnen. Die Vokale auf Englisch sind a, e, i, o, u und sie können Großbuchstaben oder Kleinbuchstaben sein. Was ist ein Vokal? Vokale sind alphabetische Zeichen, die eine spezifische Aussprache darstellen. Es gibt fünf Vokale in Englisch, einschließlich Großbuchstaben und Kleinbuchstaben: a, e, ich, o, u Beispiel 1 Eingabe: String = "TutorialPoint" Ausgabe: 6 erklären Die Vokale in der String "TutorialPoint" sind u, o, i, a, o, ich. Insgesamt gibt es 6 Yuan

Statische Bindung (statisch: :) implementiert die späte statische Bindung (LSB) in PHP, sodass das Aufrufen von Klassen in statischen Kontexten anstatt Klassen zu definieren. 1) Der Analyseprozess wird zur Laufzeit durchgeführt.

Was sind die magischen Methoden von PHP? Zu den magischen Methoden von PHP gehören: 1. \ _ \ _ Konstrukt, verwendet, um Objekte zu initialisieren; 2. \ _ \ _ Destruct, verwendet zur Reinigung von Ressourcen; 3. \ _ \ _ Call, behandeln Sie nicht existierende Methodenaufrufe; 4. \ _ \ _ GET, Implementieren Sie den dynamischen Attributzugriff; 5. \ _ \ _ Setzen Sie dynamische Attributeinstellungen. Diese Methoden werden in bestimmten Situationen automatisch aufgerufen, wodurch die Code -Flexibilität und -Effizienz verbessert werden.
