Heim >Backend-Entwicklung >PHP-Problem >Wie man PHP-Thread-Coroutine versteht

Wie man PHP-Thread-Coroutine versteht

王林
王林Original
2019-09-17 13:04:162704Durchsuche

Wie man PHP-Thread-Coroutine versteht

Verständnis von Threads und Coroutinen in PHP

1. Threads werden auch als Lightweight-Prozess bezeichnet. Dies ist eine grundlegende CPU-Ausführungseinheit und die kleinste Einheit bei der Programmausführung. Sie besteht aus Thread-ID, Programmzähler, Registersatz und Stapel. Die Einführung von Threads reduziert den Overhead der gleichzeitigen Ausführung von Programmen und verbessert die Parallelitätsleistung des Betriebssystems. Threads verfügen über keine eigenen Systemressourcen.
Der Vorteil von Threads gegenüber Prozessen besteht darin, dass sie schneller sind, unabhängig davon, ob sie einen Thread erstellen oder einen Thread beenden von Prozessen.

Das Aufkommen von Threads besteht darin, den Verbrauch von Kontextwechseln zu reduzieren, die Parallelität des Systems zu verbessern und den Fehler zu überwinden, dass ein Prozess nur eine Sache tun kann, wodurch prozessinterne Parallelität möglich wird.

2. Coroutine


Coroutine ist ein Benutzermodus-Thread. Um zu verstehen, was ein „Benutzermodus-Thread“ ist „Kernel-Status-Thread“. Kernel-Status-Threads werden vom Betriebssystem geplant. Beim Wechseln des Thread-Kontexts müssen Sie zunächst den Kontext des vorherigen Threads speichern und dann den nächsten Thread ausführen. Wenn die Bedingungen erfüllt sind, wechseln Sie zum vorherigen Thread zurück und stellen den Kontext wieder her. Das Gleiche gilt für Coroutinen, mit der Ausnahme, dass Benutzermodus-Threads nicht vom Betriebssystem, sondern von Programmierern im Benutzermodus geplant werden.

Dieses Schlüsselwort wird verwendet, um einen Interrupt zu generieren und den aktuellen Kontext zu speichern. Wenn beispielsweise ein Codeteil im Programm auf einen Remote-Server zugreift, ist die CPU zu diesem Zeitpunkt im Leerlauf. Verwenden Sie ihn daher yield, um die CPU aufzugeben, und dann den nächsten Codeabschnitt ausführen, der neben der CPU noch auf andere Ressourcen zugreift, können Sie auch yield aufrufen, um die CPU aufzugeben, damit Sie schreiben können asynchronen Code auf synchrone Weise.

yield

①Das Aufkommen von Coroutinen

Vor dem Aufkommen von Coroutinen muss Multitasking-Parallelität erreicht werden. Im Zeitalter ohne Betriebssystem (Betriebssystem) muss die Idee von Zustandsmaschinen können zum Implementieren von Multitasking verwendet werden. Zerlegen und führen Sie mehrere Aufgaben in einer Einzelprozessumgebung aus. Dieser Modus erfordert jedoch, dass Entwickler ein klares Verständnis jeder Aufgabe haben und aufgabenbezogene Funktionen entwickeln müssen (z. B. Kommunikation zwischen Aufgaben) selbst erledigen. Später erschien das Betriebssystem (OS) und wir begannen, die vom Betriebssystem bereitgestellten Prozess- und Threadfunktionen zu verwenden, um Multitasking einfach zu erreichen. Im Betriebssystem wird der Prozesskontextwechsel vom Betriebssystemkernel gesteuert. Doch dann trat ein Problem auf. Häufiger Prozesskontextwechsel führte zu einer Verschlechterung der Betriebssystemleistung (hauptsächlich kurzfristige Ausführung von kostengünstigen Aufgabenprozessen).

Um dieses Problem zu lösen, wurde ein neues Konzept vorgeschlagen, das darin besteht, mehrere Aufgaben im selben Prozess oder Thread auszuführen. Dieses Problem entspricht einer Rückkehr zur frühen Multitasking-Implementierung im Betriebssystem -freie Ära. Und jetzt heißt die Lösung Coroutinen. Sein Kern besteht darin, einen Teil der Aufgabenumschaltung vom Kernel auf die Anwendungsschicht zu übertragen.

②Grundlegende Werkzeuge und grundlegende Verwendungen von Coroutinen in PHP

Um Coroutinen zu implementieren, bietet PHP zwei neue Dinge: Generatoren und Yield-Schlüsselwörter.

(1)Was ist ein Generator?

Der Generator erbt und implementiert den Iterator, der der Funktionsdefinition im PHP-Code ähnelt, aber intern das Schlüsselwort yield verwendet, wie zum Beispiel:

Wie man PHP-Thread-Coroutine versteht Wenn es verwendet wird, sieht es so aus:

Wie man PHP-Thread-Coroutine verstehtOkay, was bedeutet es, es so zu verwenden?

(1) Zuerst $my_gen = gen(); dieser Code instanziiert nur einen neuen Generator, der Code darin wird nicht ausgeführt

(2) $my_gen->current(); gen1“ in Schritt 2 im Generator. Zu diesem Zeitpunkt wird der Code unterbrochen und die Zeichenfolge „gen1“ wird an den Generator $my_gen übergeben und als Rückgabewert der Funktion current() verwendet;
If Wenn Sie hier weiterhin die Methode current() zum Aufrufen verwenden, ändert sich das Ergebnis nicht. Der Rückgabewert von $my_gen ist immer noch gen1
(3) Nach der Ausführung von send("main send") wird die Zeichenfolge „main send“ angezeigt " ist Der Generator $my_gen wird übergeben und der Generator wird in Schritt 2 als Rückgabewert von yield an ret übergeben; über die send()-Methode wird der vorherige Kontext gefunden und nach unten fortgesetzt.
(4) Nachdem der Generator Schritt 3 ausgeführt hat und auf Schritt 4 stößt, tritt er erneut in den Interrupt ein, wenn Yield auftritt.

Der obige Inhalt dient nur als Referenz!

Empfohlenes Tutorial:

PHP-Video-Tutorial

Das obige ist der detaillierte Inhalt vonWie man PHP-Thread-Coroutine versteht. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn