Implémentation du multithreading en PHP

WBOY
Libérer: 2024-02-28 09:24:01
avant
854 Les gens l'ont consulté

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 !


Implémentez le multi-threading dans php en utilisant l'extension Parallelparallè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>
Copier après la connexion

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

, écrivez une fonction anonyme.

for 循环以在函数内打印 + 符号 50 次。接下来,在 run() 方法之外,编写另一个 for 循环来打印 - Tout d’abord, écrivez une boucle

pour imprimer le symbole + 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.


Exemple de code :

<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>
Copier après la connexion
popen() Résultat :

<code>
<code class="language-text hljs" data-lang="text"><span style="display:flex;"><span>-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
</span></span></code></code>
Copier après la connexion

popen() Utilisez la fonction

pour implémenter le multi-threading en PHP

Nous pouvons ouvrir des processus parallèles en PHP en utilisant la fonction

. popen()

Cette fonction bifurque le processus pour réaliser un traitement parallèle. Les processus ne partagent pas de ressources.

popen() 函数并创建多个进程来实现多线程。popen() 函数将 command 作为第一个参数,将 mode De cette façon, nous pouvons implémenter le multi-threading en PHP.

La fonction crée un canal vers le processus fourchu.

rw Nous pouvons parcourir la fonction

et créer plusieurs processus pour réaliser le multithreading.

La fonction prend command comme premier paramètre et mode comme deuxième paramètre. for 循环。在循环内部,创建另一个循环五次的 for

Le mode peut être

. $process 来存储 popen() 函数。将 PHP 文件 message.phpr

Par exemple, créez une boucle

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>
Copier après la connexion

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:lsjlt.com
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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!