En programmation PHP, vous devez parfois effectuer certaines opérations fastidieuses, telles que faire des requêtes réseau, lire et écrire des fichiers, etc. Si la synchronisation traditionnelle est utilisée, le programme attendra que l'opération soit terminée et que le résultat soit renvoyé. Cela empêchera le programme de faire autre chose en attendant, réduisant ainsi l'efficacité du programme.
Et si vous utilisez la méthode asynchrone, vous pouvez laisser le programme continuer à effectuer d'autres tâches en attendant la fin de l'opération. Pour faire simple, cela signifie exécuter directement un autre code sans attendre le résultat de retour de l'opération, puis revenir traiter le résultat de retour une fois l'opération terminée. Cette approche améliore considérablement l’efficacité et la simultanéité du programme.
En PHP, les méthodes asynchrones sont généralement implémentées en multi-processus ou multi-thread. Cependant, cette méthode est complexe, sujette aux erreurs et nécessite généralement l'utilisation de bibliothèques ou d'extensions tierces. Après PHP 7.2, un nouveau framework de programmation asynchrone, Swoole, a été introduit, qui fournit un ensemble complet de solutions de programmation asynchrone et peut être bien utilisé avec le code natif PHP et les bibliothèques tierces.
Swoole propose une variété de méthodes de programmation asynchrone, notamment des coroutines, des E/S asynchrones non bloquantes, des multi-processus asynchrones, etc. La méthode la plus couramment utilisée est la coroutine, qui peut implémenter une programmation asynchrone au sein d'un seul thread et présente les avantages d'une légèreté et d'une efficacité élevée.
Ci-dessous, nous utilisons un exemple simple pour présenter comment utiliser Swoole pour implémenter l'exécution asynchrone PHP.
Tout d’abord, nous devons installer l’extension Swoole. Vous pouvez l'installer à l'aide de la commande suivante :
pecl install swoole
Une fois l'installation terminée, vous devez ajouter la configuration suivante au fichier php.ini :
extension=swoole
Ensuite, jetons un coup d'œil à un exemple simple. Nous devons effectuer une opération très fastidieuse : dormir pendant 5 secondes, puis revenir à l'heure actuelle. Cette opération prend 5 secondes en mode de synchronisation traditionnel. En mode asynchrone utilisant Swoole, nous pouvons soumettre cette opération au pool de tâches asynchrones de Swoole puis y revenir immédiatement. Une fois l'opération terminée, Swoole appellera automatiquement la fonction de rappel que nous avons spécifiée et renverra le résultat de l'opération.
<?php /* 创建Swoole的异步任务池 */ $pool = new Swoole\Process\Pool(4); /* 添加异步任务 */ $pool->on("WorkerStart", function($pool, $workerId) { /* 启动5个不同的异步任务 */ for ($i = 0; $i < 5; $i++) { /* 异步执行一个耗时5秒的任务 */ $pool->add(function() { sleep(5); return date("Y-m-d H:i:s"); }); } }); /* 处理异步任务完成的回调函数 */ $pool->on("WorkerStop", function($pool, $workerId) { /* 获取执行结果,并输出到控制台 */ $results = $pool->getResults(); foreach ($results as $result) { echo "{$result}\n"; } }); $pool->start();
Dans le code ci-dessus, nous créons un pool de tâches asynchrones contenant 4 processus enfants. Ensuite, dans la fonction de rappel d'événement WorkerStart, nous avons soumis 5 tâches asynchrones différentes et spécifié une fonction de rappel anonyme comme fonction de rappel une fois la tâche terminée. Cette fonction de rappel reçoit une liste d'objets de résultat et imprime la valeur de chaque objet de résultat sur la console.
Enfin, appelez la méthode start de Swoole pour démarrer le pool de tâches asynchrones. Lorsque toutes les tâches asynchrones sont terminées, Swoole appellera automatiquement la fonction de rappel que nous avons spécifiée et renverra les résultats de l'opération. Les résultats d'exécution sont les suivants :
2021-06-10 21:20:18 2021-06-10 21:20:18 2021-06-10 21:20:18 2021-06-10 21:20:18 2021-06-10 21:20:18
Pour résumer, l'utilisation de la méthode de programmation asynchrone de Swoole peut grandement améliorer l'efficacité et la concurrence des programmes PHP. Utiliser Swoole pour écrire des programmes asynchrones nous permet de nous concentrer davantage sur le traitement de la logique métier sans trop prêter attention aux détails de l'implémentation sous-jacente.
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!