Maison >cadre php >Swoole >Une exploration préliminaire de la coroutine swoole

Une exploration préliminaire de la coroutine swoole

coldplay.xixi
coldplay.xixiavant
2020-12-18 17:39:237621parcourir

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";
    });}

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";
    });}

Les résultats sont les suivants :

睡眠了1秒
睡眠了2秒
睡眠了2秒
睡眠了3秒
睡眠了3秒

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";

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";

Les résultats sont les suivants :

睡眠了1秒
睡眠了2秒
睡眠了3秒
睡眠了3秒
睡眠了3秒
hello world!

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer