Maison > cadre php > Swoole > le corps du texte

Une exploration préliminaire de la coroutine swoole

coldplay.xixi
Libérer: 2020-12-18 17:39:37
avant
7579 Les gens l'ont consulté

apprend la coroutine de swoole La caractéristique de la coroutine est qu'elle semble être exécutée simultanément. Expérimentez-le.

Une exploration préliminaire de la coroutine swoole

Gratuit recommandé : swoole

La prémisse de cet article est que swoole a été installé sous Linux. La dernière version est la 4.5.9 (2020-12-17)

Construisez une exigence, créez 5 coroutines à la fois, chaque coroutine dort un nombre aléatoire entre 1 et 3 secondes, puis imprime Pour le temps de veille, nous espérons qu'une fois tous les programmes terminés, l'ensemble du processus prendra jusqu'à 3 secondes.

1.php

foreach (range(1, 5) as $v) {
    go(function () {
        $sleep_time = random_int(1, 3);
        sleep($sleep_time);
        echo "睡眠了" . $sleep_time . "秒\n";
    });}
Copier après la connexion

En utilisant php 1.php pour s'exécuter, le programme peut être exécuté, mais il ne ressemble pas à une coroutine, mais est exécuté de manière synchrone. L'exécution entière prend bien plus de 3 secondes. Il s'avère qu'il y a un petit bug ici. Vous devez utiliser co:sleep, afin de pouvoir dormir dans cette coroutine sans affecter l'ensemble du programme.

2.php

foreach (range(1, 5) as $v) {
    go(function () {
        $sleep_time = random_int(1, 3);
        co::sleep($sleep_time);
        echo "睡眠了" . $sleep_time . "秒\n";
    });}
Copier après la connexion

Les résultats sont les suivants :

睡眠了1秒
睡眠了2秒
睡眠了2秒
睡眠了3秒
睡眠了3秒
Copier après la connexion

En bref, la coroutine avec moins de sommeil doit sortir en premier, et la coroutine qui a dormi pendant de même le temps s'imprime en même temps. Et le temps total pris à la fin du programme est de 3 secondes, indiquant que la concurrence est réussie.

Maintenant, j'espère qu'une fois les 5 coroutines terminées, hello world pourra être imprimé !

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";
Copier après la connexion

Le résultat est un autre problème, hello world est toujours imprimé en premier.
Donc, vous devez utiliser le conteneur coroutine ici.

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";
Copier après la connexion

Les résultats sont les suivants :

睡眠了1秒
睡眠了2秒
睡眠了3秒
睡眠了3秒
睡眠了3秒
hello world!
Copier après la connexion

Le résultat correct peut être imprimé cette fois, parfait !
La coroutine de Swoole est assez intéressante~

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:learnku.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal