L'implémentation du multi-threading en PHP a toujours été un sujet de préoccupation pour les développeurs. Avec le développement continu des applications Internet, la nécessité de traiter un grand nombre de requêtes simultanées devient de plus en plus urgente. Cet article présentera comment implémenter le multi-threading en PHP, explorera les avantages et les scénarios applicables du multi-threading et aidera les développeurs à mieux faire face aux exigences complexes de concurrence. Examinons de plus près l'application du multithreading en PHP !
Parallel
parallèleconcurrency
En utilisant l'extension de concurrence parallèle Parallel
, nous pouvons implémenter le multi-threading en PHP.
Cette extension fournit une explication de la classe Thread parallelRuntime
。我们可以从 parallelRuntime()
qui crée un objet et crée ainsi un fil.
Cette classe fournit une méthode run()
,它安排任务并行运行。我们可以将 Closure
作为参数传递给 run
méthode.
Ce paramètre est généralement appelé task
, et on peut également spécifier un array comme deuxième paramètre de la méthode. Le contenu du tableau est transmis à la tâche.
Il y a certaines conditions avant de télécharger l'extension Parallel
Parallel Concurrency. La version PHP doit être 8.0 et Zend Thread Safe (ZTS) doit être activé.
<pthread.h>
标头是另一个要求。我们可以从 pecl
Téléchargez l'extension comme indiqué ci-dessous.
<code> <code class="language-php hljs" data-lang="php"><span style="display:flex;"><span>pecl install parallel </span></span></code></code>
On peut utiliser des for
boucles pour tester l'exécution parallèle d'un programme.
Par exemple, nous pouvons exécuter une boucle à l’intérieur de la méthode run()
et une autre boucle en dehors de la méthode. Dans ce cas, l'exécution du code sera parallèle.
Par exemple, créez un objet $rt
de classe parallelRuntime
puis utilisez cet objet pour appeler la méthode parallelRuntime
类的对象 $rt
,然后使用该对象调用 run()
方法。在 run()
. Dans la méthode
for
循环以在函数内打印 +
符号 50 次。接下来,在 run()
方法之外,编写另一个 for
循环来打印 -
Tout d’abord, écrivez une boucle
+
50 fois à l’intérieur de la fonction. Ensuite, en dehors de la méthode , écrivez une autre boucle run()
方法内的循环在单独的线程中运行,run()
方法外的循环将同时执行。结果,-
和 +
qui imprime les symboles -
50 fois.
Puisque la boucle à l’intérieur de la méthode
s’exécute dans un thread séparé, la boucle en dehors de la méthode s’exécutera simultanément. En conséquence, les symboles -
et +
sont imprimés simultanément, comme indiqué dans la section de sortie ci-dessous.
Par conséquent, nous pouvons utiliser des extensions de concurrence parallèle pour implémenter le multithreading en PHP.
<code> <code class="language-php hljs" data-lang="php"><span style="display:flex;"><span><span style="color:#19177c">$rt</span> <span style="color:#666">=</span> <span style="color:#008000;font-weight:bold">new</span> \parallel\Runtime(); </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span><span style="color:#19177c">$rt</span><span style="color:#666">-></span><span style="color:#7d9029">run</span>(<span style="color:#008000;font-weight:bold">funct<strong class="keylink">io</strong>n</span>(){ </span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">for</span> (<span style="color:#19177c">$i</span> <span style="color:#666">=</span> <span style="color:#666">0</span>; <span style="color:#19177c">$i</span> <span style="color:#666"><</span> <span style="color:#666">50</span>; <span style="color:#19177c">$i</span><span style="color:#666">++</span>) </span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">echo</span> <span style="color:#ba2121">"+"</span>; </span></span><span style="display:flex;"><span>}); </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">for</span> (<span style="color:#19177c">$i</span> <span style="color:#666">=</span> <span style="color:#666">0</span>; <span style="color:#19177c">$i</span> <span style="color:#666"><</span> <span style="color:#666">50</span>; <span style="color:#19177c">$i</span><span style="color:#666">++</span>) { </span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">echo</span> <span style="color:#ba2121">"-"</span>; </span></span><span style="display:flex;"><span>} </span></span></code></code>
popen()
Résultat : <code> <code class="language-text hljs" data-lang="text"><span style="display:flex;"><span>-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ </span></span></code></code>
popen()
Utilisez la fonction
Nous pouvons ouvrir des processus parallèles en PHP en utilisant la fonction
. popen()
popen()
函数并创建多个进程来实现多线程。popen()
函数将 command
作为第一个参数,将 mode
De cette façon, nous pouvons implémenter le multi-threading en PHP.
r
或 w
Nous pouvons parcourir la fonction
La fonction prend command
comme premier paramètre et mode
comme deuxième paramètre. for
循环。在循环内部,创建另一个循环五次的 for
. $process
来存储 popen()
函数。将 PHP 文件 message.php
和 r
qui boucle cinq fois. À l’intérieur de la boucle, créez une autre boucle pclose()
函数关闭 $process
qui boucle cinq fois.
À l'intérieur de la sous-boucle, créez un tableau $process
pour stocker la fonction pclose()
. Définissez le fichier PHP message.php
et le mode r
comme premier et deuxième paramètres.
Ensuite, créez une autre sous-boucle et utilisez popen()
.
Ici, cinq processus sont exécutés en parallèle dans la première sous-boucle. Le processus se termine dans la deuxième sous-boucle à l'aide de la fonction
. 🎜 🎜 C'est ainsi que nous implémentons le multithreading en utilisant la fonction 🎜 en PHP. 🎜 🎜 Exemple de code : 🎜<code> <code class="language-php hljs" data-lang="php"><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">for</span> (<span style="color:#19177c">$i</span><span style="color:#666">=</span><span style="color:#666">0</span>; <span style="color:#19177c">$i</span><span style="color:#666"><</span><span style="color:#666">5</span>; <span style="color:#19177c">$i</span><span style="color:#666">++</span>) { </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">for</span> (<span style="color:#19177c">$j</span><span style="color:#666">=</span><span style="color:#666">0</span>; <span style="color:#19177c">$j</span><span style="color:#666"><</span><span style="color:#666">5</span>; <span style="color:#19177c">$j</span><span style="color:#666">++</span>) { </span></span><span style="display:flex;"><span> <span style="color:#19177c">$process</span>[<span style="color:#19177c">$j</span>] <span style="color:#666">=</span> popen(<span style="color:#ba2121">'message.php'</span>, <span style="color:#ba2121">'r'</span>); </span></span><span style="display:flex;"><span> } </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">for</span> (<span style="color:#19177c">$j</span><span style="color:#666">=</span><span style="color:#666">0</span>; <span style="color:#19177c">$j</span><span style="color:#666"><</span><span style="color:#666">5</span>; <span style="color:#666">++</span><span style="color:#19177c">$j</span>) { </span></span><span style="display:flex;"><span> pclose(<span style="color:#19177c">$process</span>[<span style="color:#19177c">$j</span>]); </span></span><span style="display:flex;"><span> } </span></span><span style="display:flex;"><span>} </span></span></code></code>
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!