Swoole est un framework de communication réseau hautes performances pour PHP, qui peut nous aider à réaliser une programmation simultanée réseau hautes performances. L'une des fonctionnalités les plus importantes est la prise en charge du multi-processus, ce qui nous permet de mettre en œuvre une programmation réseau à haute concurrence via plusieurs processus.
Cet article expliquera comment utiliser Swoole pour implémenter une programmation simultanée multi-processus, y compris la création multi-processus, la communication, la synchronisation, etc., et fournira des exemples de code spécifiques.
$process = new swoole_process(function(swoole_process $process) { // 子进程的逻辑代码 $process->write("Hello world! "); // 向主进程发送消息 $process->exit(); }); $process->start(); // 父进程接收子进程消息 $msg = $process->read(); echo $msg;
Dans cet exemple, un sous-processus est créé à l'aide du constructeur de la classe swoole_process et le code logique du sous-processus est implémenté via une fonction de rappel. La méthode start() démarre le processus enfant, puis le processus parent reçoit le message envoyé par le processus enfant via la méthode read().
$process = new swoole_process(function(swoole_process $process) { $process->write("Hello world! "); $data = $process->read(); echo "Child process received: " . $data; $process->exit(); }, true); // 启用管道通信模式 $process->start(); $msg = $process->read(); echo $msg; $process->write("I am the parent process. "); $process->wait(); // 等待子进程退出
Dans cet exemple, nous appelons le constructeur de la classe swoole_process et passons un paramètre de type booléen indiquant que le mode de communication pipe est activé. Appelez ensuite la méthode write() dans le processus parent pour envoyer des messages au processus enfant et recevez des messages du processus enfant via la méthode read(). Dans le processus enfant, la méthode write() est également utilisée pour envoyer des messages au processus parent, et la méthode read() est utilisée pour recevoir des messages du processus parent.
$lock = new swoole_lock(SWOOLE_MUTEX); // 创建一个互斥锁 $process1 = new swoole_process(function(swoole_process $process) use ($lock) { $lock->lock(); // 加锁 echo "Process 1 acquired the lock. "; sleep(1); $lock->unlock(); // 解锁 }); $process2 = new swoole_process(function(swoole_process $process) use ($lock) { $lock->lock(); // 加锁 echo "Process 2 acquired the lock. "; sleep(1); $lock->unlock(); // 解锁 }); $process1->start(); $process2->start(); $process1->wait(); $process2->wait();
Dans cet exemple, nous utilisons la classe swoole_lock pour créer un verrou mutex et le verrouiller et le déverrouiller respectivement dans les deux processus enfants. Dans le processus parent, nous appelons la méthode wait() pour attendre que les deux processus enfants terminent leur exécution.
$workers = []; $worker_num = 3; for ($i = 0; $i < $worker_num; $i++) { $process = new swoole_process(function (swoole_process $worker) { $num = rand(1, 100); echo "Worker {$worker->pid} is calculating the square of $num... "; sleep(1); $worker->write($num * $num); $worker->exit(); }, true); $pid = $process->start(); $workers[$pid] = $process; } // 父进程接收子进程返回的计算结果 foreach ($workers as $pid => $process) { $result = $process->read(); echo "Worker $pid calculated the result: $result "; } echo "All workers have completed their tasks. ";
Dans cet exemple, nous créons 3 sous-processus, chaque sous-processus génère aléatoirement un nombre, calcule le carré de ce nombre et le renvoie. Le processus parent reçoit les résultats renvoyés par tous les processus enfants via une boucle et les imprime sur la console. Finalement, le processus parent imprime un message indiquant que toutes les tâches sont terminées.
Résumé
Swoole est un framework de communication réseau puissant et hautes performances qui offre un bon support pour la programmation multi-processus. Lorsque vous utilisez Swoole pour la programmation multi-processus, vous devez prendre en compte divers problèmes tels que la création de processus, la communication et la synchronisation. Cet article fournit des exemples de code spécifiques, dans l'espoir d'aider les lecteurs à mieux comprendre et maîtriser les compétences de programmation multi-processus de 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!