Was bedeutet PHP-Coroutine?
PHP-Coroutinen sind äquivalent zu Threads. Wenn Sie den Thread-Kontext wechseln, müssen Sie zuerst den Kontext des vorherigen Threads speichern und dann den nächsten Thread ausführen, wenn die Bedingungen erfüllt sind Zum vorherigen Thread zurückkehren und den Kontext wiederherstellen. Das Gleiche gilt für Coroutinen, mit der Ausnahme, dass Coroutinen vom Benutzer geplant werden, während Threads vom System geplant werden.
PHP-Coroutine-Nutzung
Coroutine-Unterstützung basiert auf dem iterativen Generator und fügt die Funktion hinzu, Daten zurück an den Generator zu senden (der Aufrufer sendet Daten an die aufgerufene Generatorfunktion). ). Dadurch wird die unidirektionale Kommunikation vom Generator zum Aufrufer in eine bidirektionale Kommunikation zwischen den beiden umgewandelt.
Die Funktion der Datenübergabe erfolgt über die send()-Methode des Iterators Die Coroutine logger() ist ein Beispiel dafür, wie diese Kommunikation funktioniert:
<?php function logger($fileName) { $fileHandle = fopen($fileName, 'a'); while (true) { fwrite($fileHandle, yield . "\n"); } } $logger = logger(__DIR__ . '/log'); $logger->send('Foo'); $logger->send('Bar') ?>
Wie Sie sehen können, wird yield hier nicht als Anweisung, sondern als Ausdruck verwendet, d. h. es kann in einen Wert weiterentwickelt werden ist der Wert, der vom Aufrufer an die Methode send() übergeben wird. In diesem Beispiel wird der Yield-Ausdruck zuerst durch „Foo“ ersetzt und in Log geschrieben, und dann durch „Bar“ und in Log geschrieben
Das obige Beispiel zeigt yield als Empfänger. Schauen wir uns als Nächstes ein Beispiel an, wie man gleichzeitig empfängt und sendet:<?php function gen() { $ret = (yield 'yield1'); var_dump($ret); $ret = (yield 'yield2'); var_dump($ret); } $gen = gen(); var_dump($gen->current()); // string(6) "yield1" var_dump($gen->send('ret1')); // string(4) "ret1" (the first var_dump in gen) // string(6) "yield2" (the var_dump of the ->send() return value) var_dump($gen->send('ret2')); // string(4) "ret2" (again from within gen) // NULL (the return value of ->send()) ?>
PHP-Tutorial“
Das obige ist der detaillierte Inhalt vonWas bedeutet PHP-Coroutine?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!