Tout d'abord, Swoole ne peut s'exécuter qu'en mode ligne de commande (Cli), nous utilisons donc la ligne de commande pour le développement et le débogage, pas php-fpm/apache, etc. Dans Swoole, nous pouvons utiliser `SwooleCoroutine::create()`
pour créer des coroutines, ou vous pouvez également utiliser l'abréviation `go()`.
Première introduction à la coroutine Swoole
Résultat de l'exécution :
Comparaison de la coroutine Swoole avec le mode synchrone
Nous avons toujours dit que la coroutine Swoole est adaptée aux scénarios intensifs en E/S. Dans le même environnement de configuration matérielle, elle offrira plus d'accès que le mode synchrone traditionnel.
Les requêtes de lecture et d'écriture de fichiers et de communication réseau (MySQL, Redis, HTTP, etc.) que nous connaissons sont tous des scénarios gourmands en E/S.
Supposons qu'une requête SQL prend 100 ms. Dans le mode de synchronisation traditionnel, le processus actuel ne peut pas effectuer d'autres opérations pendant ce temps de 100 ms. Si vous souhaitez exécuter ce SQL dix fois, cela peut prendre plus d'une seconde.
Si vous utilisez des coroutines, bien que différentes coroutines soient exécutées dans l'ordre, pendant la période d'attente précédente de 100 ms, la couche inférieure planifiera le CPU pour effectuer les opérations des autres coroutines. En d'autres termes, la première requête n'a peut-être pas renvoyé de résultats et plusieurs autres requêtes ont été envoyées à MySQL et sont en cours d'exécution. Si dix coroutines sont ouvertes et que ce SQL est exécuté séparément, cela ne peut prendre que plus de 100 ms.
Le code du test est le suivant :
Swoole\Runtime::enableCoroutine(); // 开启一键协程化 function work() { $pdo = new \PDO('mysql:host=127.0.0.1;dbname=db_test', 'root', 'root'); $pdo->exec('select SLEEP(0.1)'); // 模拟sql需要执行 100ms 的情况 } $time = microtime(true); for($i = 0; $i < 10; ++$i) { work(); } echo 'time: ', (microtime(true) - $time), 's', PHP_EOL; $time = microtime(true); for($i = 0; $i < 10; ++$i) { go('work'); } swoole_event_wait(); // 等待所有协程执行完 echo 'time: ', (microtime(true) - $time), 's', PHP_EOL;
Résultat de l'exécution :
time: 1.0326268672943s time: 0.10734605789185s
Le code ci-dessus peut être imaginé comme le temps nécessaire à un seul processus pour traiter 10 demandes. Chaque requête nécessite l'exécution d'une instruction SQL qui prend 100 ms.
Le mode synchrone, qui prend environ 1 seconde, est fpm. Comme on peut le constater, rien ne peut être fait en attendant 100 ms.
Le modèle Coroutine, qui prend environ 0,1 seconde, est Swoole. Pendant la période d'attente de 100 ms, la coroutine actuelle sera suspendue et la planification sous-jacente permettra au CPU d'effectuer les opérations d'autres coroutines.
Articles et tutoriels connexes recommandés : tutoriel swoole
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!