Maison > cadre php > Swoole > le corps du texte

La différence entre le mode de synchronisation fpm traditionnel et la coroutine swoole

王林
Libérer: 2019-12-09 09:28:45
original
2599 Les gens l'ont consulté

La différence entre le mode de synchronisation fpm traditionnel et la coroutine swoole

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

La différence entre le mode de synchronisation fpm traditionnel et la coroutine swoole

Résultat de l'exécution :

La différence entre le mode de synchronisation fpm traditionnel et la coroutine swoole

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 &#39;time: &#39;, (microtime(true) - $time), &#39;s&#39;, PHP_EOL;
$time = microtime(true);
for($i = 0; $i < 10; ++$i)
{
    go(&#39;work&#39;);
}
swoole_event_wait(); // 等待所有协程执行完
echo &#39;time: &#39;, (microtime(true) - $time), &#39;s&#39;, PHP_EOL;
Copier après la connexion

Résultat de l'exécution :

time: 1.0326268672943s
time: 0.10734605789185s
Copier après la connexion

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!

Étiquettes associées:
source:php.cn
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