web-dev-qa-db-fra.com

Php multithread

Php, n'est pas vraiment fait pour multithread mais avez-vous une solution de contournement pour traiter les threads en php.

19
Roch

Il existe plusieurs solutions, allant de "Hmmm, à peu près OK" à "Poke out the eyes".

  1. Ecrivez votre code multithread sous la forme d'une extension PHP . Probablement le plus supporté, mais vous devez écrire en C (ou dans un autre langage pris en charge pour les extensions).
  2. Créez des processus enfants sur le système d'exploitation sous-jacent et lisez/écrivez sur leur entrée/sortie à l'aide de descripteurs de fichier standard. Voir popen pour un itinéraire, ou PCNTL . Raisonnable, et vous pouvez utiliser PHP à partir de la ligne de commande.
  3. Effectuez d’autres requêtes HTTP à votre intention via CURL ou une requête similaire, ce qui vous permettra de profiter de la capacité de traitement multiple de vos serveurs Web. Conserve tout votre code "comme sur le Web", mais les développeurs du support technique en colère risquent de vous traquer et de casser les pouces.
26
Adam Wright

Comme il s’agit d’un excellent résultat sur google, php a une nouvelle extension, pthreads: http://www.php.net/manual/en/book.pthreads.php spécifiquement pour cela.

20
GHayes

Vérifiez la bibliothèque PCNTL . Cela peut vous aider à imiter un comportement de thread.

Il y a aussi cette classe :

"Cette classe peut émuler l'exécution De threads de programme en utilisant des requêtes HTTP Distinctes au même script.

Il établit une connexion HTTP avec Le même serveur Web pour exécuter le script Même PHP. Il envoie une demande En transmettant au nom une fonction à exécuter Et un argument à transmettre à cette fonction .

Le script demandé exécute du code Qui détecte la demande d'exécution du thread Et appelle la fonction spécifiée .

Lorsque le script de demande de fil se termine, , Les valeurs renvoyées par la fonction appelée Sont renvoyées sous forme de chaîne Sérialisée.

Le script appelant peut exécuter d'autres tâches Pendant l'exécution du script de thread. Les résultats peuvent être collectés ultérieurement À la fin du script. "

6
rogeriopvl

Multithreading signifie effectuer plusieurs tâches ou processus simultanément, nous pouvons y arriver en php en utilisant le code suivant, bien qu’il n’existe aucun moyen direct d’atteindre le multithreading en php, mais nous pouvons obtenir les mêmes résultats en procédant comme suit.

chdir(dirname(__FILE__));  //if you want to run this file as cron job
 for ($i = 0; $i < 2; $i += 1){
 exec("php test_1.php $i > test.txt &");
 //this will execute test_1.php and will leave this process executing in the background and will go         

 //to next iteration of the loop immediately without waiting the completion of the script in the   

 //test_1.php , $i  is passed as argument .

}

Test_1.php

$conn=mysql_connect($Host,$user,$pass);
$db=mysql_select_db($db);
$i = $argv[1];  //this is the argument passed from index.php file
for($j = 0;$j<5000; $j ++)
{
mysql_query("insert  into  test   set

                id='$i',

                comment='test',

                datetime=NOW() ");

}

Cela exécutera test_1.php deux fois simultanément et les deux processus s'exécuteront en arrière-plan simultanément. Vous pourrez ainsi réaliser le multithreading en php.

Ce mec a vraiment fait du bon travail Multithreading en php (Lien mort)

0
Pir Abdul

Bien que ce ne soit pas la meilleure solution, utiliser VirtualBox (qui émule tous les cœurs de processeur) puis placer un PHP dans un système d'exploitation sous VitualBox m'a permis d'améliorer considérablement les performances tout en calculant des données volumineuses. chiffres (même si vous risquez de perdre les performances et la RAM 64 bits). Néanmoins, cela a fonctionné pour ce que je voulais accomplir. 

L'idée est que vous devez l'imiter.

0
Damir Olejar

Vous pouvez également utiliser des processus au lieu de threads utilisant des tubes ou des sockets pour les communiquer.

0
Vinko Vrsalovic