Heim > PHP-Framework > Swoole > Eine vorläufige Untersuchung der Swoole-Coroutine

Eine vorläufige Untersuchung der Swoole-Coroutine

coldplay.xixi
Freigeben: 2020-12-18 17:39:37
nach vorne
7595 Leute haben es durchsucht

In der Coroutine, die swoole lernt, besteht das Merkmal der Coroutine darin, dass sie scheinbar gleichzeitig ausgeführt wird. Experimentieren Sie damit.

Eine vorläufige Untersuchung der Swoole-Coroutine

Kostenlos empfohlen: swoole

Die Voraussetzung für diesen Artikel ist, dass swoole unter Linux installiert wurde. Die neueste Version ist 4.5.9 (17.12.2020)

Erstellen Sie eine Anforderung, erstellen Sie 5 Coroutinen gleichzeitig, jede Coroutine schläft eine zufällige Zahl zwischen 1 und 3 Sekunden und druckt dann die Ruhezeit aus abgeschlossen sind, dauert der gesamte Vorgang bis zu 3 Sekunden.

1.php

foreach (range(1, 5) as $v) {
    go(function () {
        $sleep_time = random_int(1, 3);
        sleep($sleep_time);
        echo "睡眠了" . $sleep_time . "秒\n";
    });}
Nach dem Login kopieren

Mit PHP 1.php zum Ausführen kann das Programm ausgeführt werden, es fühlt sich jedoch nicht wie eine Coroutine an, sondern wird synchron ausgeführt. Die gesamte Ausführung dauert weit mehr als 3 Sekunden. Es stellt sich heraus, dass hier ein kleiner Fehler vorliegt. Sie sollten co:sleep verwenden, damit Sie in dieser Coroutine schlafen können, ohne das gesamte Programm zu beeinträchtigen.

2.php

foreach (range(1, 5) as $v) {
    go(function () {
        $sleep_time = random_int(1, 3);
        co::sleep($sleep_time);
        echo "睡眠了" . $sleep_time . "秒\n";
    });}
Nach dem Login kopieren

Die Ergebnisse sind wie folgt:

睡眠了1秒
睡眠了2秒
睡眠了2秒
睡眠了3秒
睡眠了3秒
Nach dem Login kopieren

Kurz gesagt, die Coroutine, die weniger schläft, muss zuerst beendet werden, und die Coroutine, die gleichzeitig schläft, druckt gleichzeitig Zeichen aus. Und die Gesamtzeit am Ende des Programms beträgt 3 Sekunden, was darauf hinweist, dass die Parallelität erfolgreich ist.

Jetzt hoffe ich, dass Hallo Welt gedruckt werden kann, nachdem die 5 Coroutinen fertig sind!

3.php

foreach (range(1, 5) as $v) {
    go(function () {
        $sleep_time = random_int(1, 3);
        co::sleep($sleep_time);
        $a = random_int(1, 1000);
        echo "睡眠了" . $sleep_time . "秒\n";
    });}echo "hello world!\n";
Nach dem Login kopieren

Das Ergebnis ist ein weiteres Problem: Hallo Welt wird immer zuerst gedruckt.
Sie müssen hier also den Coroutine-Container verwenden.

4.php

Co\run(function () {
    foreach (range(1, 5) as $v) {
        go(function ()  {
            $sleep_time = random_int(1, 3);
            co::sleep($sleep_time);
            echo "睡眠了" . $sleep_time . "秒\n";
        });
    }});echo "hello world!\n";
Nach dem Login kopieren

Die Ergebnisse sind wie folgt:

睡眠了1秒
睡眠了2秒
睡眠了3秒
睡眠了3秒
睡眠了3秒
hello world!
Nach dem Login kopieren

Das richtige Ergebnis kann dieses Mal gedruckt werden, perfekt!
swooles Coroutine ist ein bisschen interessant~

Das obige ist der detaillierte Inhalt vonEine vorläufige Untersuchung der Swoole-Coroutine. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:learnku.com
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage