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 !)

Brindavoine

Partager et découvrir : Ces icones representent les sites de bookmarking social dans lesquels vos lecteurs peuvent partager et faire découvrir vos pages.
  • Bluegger
  • Fuzz
  • Tapemoi
  • Scoopeo
  • Pioche
  • Blogasty
  • Zataz
  • MisterWong Fr
  • Facebook
  • BlogMemes Fr
  • Digg
  • Reddit
  • Technorati
  • del.icio.us
  • Furl
  • YahooMyWeb
  • Yoolink
  • Digg France
  • Wikio
  • DiggFR.com
  • Le Ouizz
  • StumbleUpon

Billets similaires

Tags: PHP //

6 Réponses pour “Multithread en PHP : le point sur les différentes techniques”

  1. Pépy il est sympa, il rembourse tout aux clients. Du temps d’Idrac, elle aurait juste payé les sandwichs :)

  2. [...] du multithread en php. Ces m?

  3. 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…

  4. Bravo pour ce petit article qui m’a permis de gagner bien du temps :)

  5. 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+!!

  6. 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.

Laissez un commentaire