Php, n'est pas vraiment fait pour multithread mais avez-vous une solution de contournement pour traiter les threads en php.
Il existe plusieurs solutions, allant de "Hmmm, à peu près OK" à "Poke out the eyes".
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.
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. "
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)
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.
Vous pouvez également utiliser des processus au lieu de threads utilisant des tubes ou des sockets pour les communiquer.