Multithread en PHP : le point sur les différentes techniques
La programmation multithreadée en PHP est un véritable casse tête, en effet il n’existe pas à l’heure d’aujourd’hui de véritable moyen de faire du multithread en PHP 5.
Petit rappel au passage :
Un programme multithreadé est un programme exécutant plusieurs tâches (threads) en parallèle, ce qui permet d’optimiser les temps de traitement et de ne pas bloquer l’exécution globale d’un programme.
Étant en train de coder un système de mise à jour des profils facebook pour l’application dédiée wanasport, j’ai été confronté à un problème : facebook a un temps de réponse ultra lent ce qui ralentit mon script de mise à jour. Pour l’instant pas trop de problème sur la mise à jour d’une centaine de profils, mais j’ai été amené à me renseigner sur les méthodes de multithreading PHP afin d’améliorer la mise à jour.
N’y connaissant rien à la base, voilà les différentes méthodes que j’ai pu trouver au cours de mes recherches et ce que j’en ai retenu. Ces méthodes permettent de mettre en place un « pseudo multithreading ».
Méthode 1 : Les Forks (Ne fonctionne QUE sous unix):
PHP propose via les fonctions PCNTL des moyens de création, gestion et contrôle des processus qui, couplées à une gestion des Sémaphores permet de gérer plusieurs processus simultanément.
Attention cette méthode n’est pas portable, et peut produire des résultats inattendus, et il y a des risques de saturation de la mémoire si le programme est mal codé.
Voila un exemple de programme multithreadé utilisant ces deux modules : http://www.noisette.ch/wiki/index.php/PHP/Multithread
Méthode 2 (Ne fonctionne QUE sous unix):
Contrairement à PHP, Apache 2 lancé en mode Worker gère correctement le multithread. Nous pouvons donc exécuter, par appels asynchrones depuis PHP, plusieurs scripts en même temps.
Méthode 3 : Utilisation des streams
Une utilisation astucieuse des streams permet d’effectuer simultanément plusieurs requêtes. La méthode est expliquée par Wez Furlong
Méthode 4 : Utilisation de Curl
L’extension Curl pour PHP, qui permet d’exécuter simplement des requêtes à travers différents protocoles, offre aussi une possibilité de simili multithread lors de requetes distantes. Tout est expliqué dans cet article sur ibuildings
Méthode 5 : Utillisation d’AJAX
La dernière solution consiste à créer une page mère, qui lancée depuis un navigateur, ferrais différentes requêtes AJAX vers plusieurs scripts qui seraient alors traités simultanément. Attention, il existe généralement une limite d’appels simultanés sur les navigateurs web.
Conclusion :
Voila un petit tour d’horizon qui met en lumière les différentes méthodes de multithread. Pour résoudre mon problème je me penche actuellement sur les méthodes 3 et 4. Je vous tiendrai au courant sur mes différents tests. en attendant, on ne peux qu’espérer que PHP 6 implémente enfin la question du multithread (aussi simplement qu’en Java par exemple ce serait top !)
Billets similaires
Tags: PHP // 11 Commentaires »





Pépy il est sympa, il rembourse tout aux clients. Du temps d’Idrac, elle aurait juste payé les sandwichs
[...] du multithread en php. Ces m?
Merci pour cette article intéressant.. C’est vrai que c’est pas facile le multithread en php… mais ce comparatif explique bien les choses…
Avec curl, on peut utiliser curl_multi_add_handle pour gérer plusieurs requetes curl parrallelement…
Bravo pour ce petit article qui m’a permis de gagner bien du temps
Bonjour ! Je lit pas mal le forum souvent… mais là je choisit de me connecter pour vous demander c’est quoi l’adresse au juste du magazine decouvertes avec forum . J’ai apprit qu’il y aurait un tas de photos à faire sur ce site..! A+!!
Très interessant ce post.
Moi j’utilise la solution ajax, mais j’ai eu la drôle de surprise de m’apercevoir qu’une même session ne peux éxecuter qu’une seule requète en meme temps sur un même domaine (peut etre est ce due a ma config apache).
J’ai donc du créer des sous domaine
th1.mondomaine.com
th2.mondomaine.com
th3.mondomaine.com
th4.mondomaine.com
et gérer en javascript quel serveur utiliser avec un simple round robin.
bon ca fonctionne très bien (sauf qu’on peut oublier les session). m’empeche que cela m’a pas mal surpris.
c’est trés sympa trés utile et ça m’a fait gagné du temps!!
MerciSsssSSSSsS
[...] This post was mentioned on Twitter by Arnaud Ligny, Nicolas Trossat. Nicolas Trossat said: Multithreading PHP pour l'import de produits en utilisant les class Magento. Perf multiplié par 5 pour le moment! http://goo.gl/53A6 [...]
Il y a aussi ce script, PHP Multi-Process, mais je n’ai jamais testé : http://bit.ly/a5eHWh
Petites précisions, si je peux me permettre, pour les cas 3, 4, et 5, on parlerait de multiplexage plutôt que de tenter le rapprochement avec du multithreading, car ce sont deux notions très différentes (Wez Furlong définit d’ailleurs en ses termes sa propre méthode, avec beaucoup de réalisme).
La méthode 1 est en fait la seule vraie méthode proposée ici pour faire des applications multithreadée. Une application multithread implique:
1) la parallélisation de traitement
2) la possibilité de synchroniser les traitements parallélisés (pour des fins de contrôles)
3) la possibilité de partager de la donnée entre les threads parallèles (fils) et celui qui les a lancé (père).
Les bons outils sont donc, dans le même ordre :
- fork (voir PCNTL)
- sémaphores (SEM)
- segment de mémoire partagé (SHM)
Effectivement, ça n’est pas portable, on oublie donc le multithread en PHP sous windows pour le moment, et c’est assez touchy à bien manipuler, comme tout ce qui touche à l’exécution asynchrone, car il faut bien veiller à contrôler tout cela.
Pour finir, je ne saurais recommander l’usage de telles méthodes pour des applications webs, dont le contexte d’execution est rarement threadsafe (il faut en effet Apache en mode worker). Cela convient mieux à des scripts qui tournent en command line, tels que des crons (maintenance, flux de données, etc..).
De l’autre coté, le multiplexage, c’est simplement envoyer plusieurs messages (comme par exemple des requêtes http) d’un coup à des destinataires différents, qui en feront ce qu’ils voudront (peut être tous la même chose, mais ça n’est pas une contrainte). Les différents processus qui tourneront en parallèles n’ont rien à faire les uns des autres, ils sont autonomes, voir même ne font pas du tout partie de la même application, et c’est là l’énorme différence avec du multithreading.
Les méthodes 3, 4 et 5 s’y prêtent toutes très bien.
Attention donc, tenter d’intégrer des contraintes liées aux multithreading telles qu’exposées ci-dessus relèverait probablement du bricolage bien bancale.
Web hosting is a server for serving and maintaining files for one or more network sites.
A web hosting mending is a type of Internet hosting service that resolve help an individual, province, college, superintendence syndicate and more hamlet their website on the World Broad Web.
Web hosting companies present space on a server for play via their clients as artistically as the internet accessibility required to bag on the web.
Even more vital than the computer space is a unpolluted medium for the files and a loose connection to the Internet.
There are various divergent types of spider’s web hosts, control panels, operating systems, and options.
In totalling there are included services such as website builders, search engine marketing, database deployment, and online stores.
So how do you know what to exploit and who to take it from?
Since they are so numerous options this can be confusing.
The leading thing you want to come to a decision is if you lust after a Windows spider’s web host or a linux trap host.
Much of the old hat it does not matter though if you eat specific software to utility such as a shopping trolley or database bearing this force be important.
It is greatest to ascertain out from your software provider the requirements of the program.
Then you will necessity to decide on if you necessary a province name and the amount of latitude and bandwidth needed.
Various trap hosting companies actually give away province names to up to date customers so this may help sweep your business.
In addition various network hosts also give a leviathan amount of space and bandwidth in their hosting plans hoping you disposition not truly need it.
So at once that you have decided on the operating methodology and how much you want now fail us look at the options.
A most approved election is the speak of a unshackled website builder. This can be important if you have no or smidgen event with html programming. If you receive some experience and scorn a database you determination then have occasion for to choose how varied databases you require. Some hosts inclination occasion you immense databases and some cost per database. There are also varied other freebies convenient such as spontaneous organize (software) base, shopping carts, templates, search engine optimization assistance, immeasurable province hosting and much more. Spam prevention is also an substantial characteristic you should expect from your host.
Now that you entertain found the options you are looking owing it is measure to look for a host.
Wow! There are so many. A simple search on the period of time spider’s web innkeeper devise cast thousands of results. So who do you choose?
A trap master should always be present in case you have need of assistance. At the least they should receive a expropriate desk and faq quarter in cause you secure questions. If feasible a phone multitude is also helpful. They should also equip a abstention server so your website is instantly clear and not slow to view. In putting together they should afford no or entirely bantam downtime. This is when your website is not observable at all. Finally your files should be in a secure environment. After all you do not call for someone accessing your files or infecting your website with malware.
To conclude they are various web hosting options and hosts. It is momentous to do your homework to put one’s finger on the tucker one repayment for your website.