apprend la coroutine de swoole La caractéristique de la coroutine est qu'elle semble être exécutée simultanément. Expérimentez-le.
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!