Multi-threading en PHP
Réaliser un script PHP pour interroger un serveur n'est pas bien compliqué. Adapter ce script pour interroger plusieurs serveurs (distants) "simultanément", est tout de suite moins évident. Classiquement, en PHP, les traitements se font de manière linéaire. L'un après l'autre. Et au premier échec (exemple : timeout), la chaîne est rompue...
Une première solution consisterait à abandonner le PHP pour des langages disposant de mécanismes de multi-threading. Comme Perl.
On pourrait aussi reconsidérer le problème sous l'angle de PHP5.
Justement, Wez Furlong explique sur son blog comment réaliser simultanément plusieurs tâches en PHP. En suivant la démarche proposée, on pourrait interroger plusieurs serveurs et traiter les retours non plus de manière linéaire, mais au fur et à mesure de leur arrivée, de façon concurrentielle. A l'aide de la fonction stream_select() ou encore curl_multi_select(). Au final, l'application PHP serait certainement plus rapide et réduirait drastiquement les risques de timeout.

Pas convaincu ? Voici un rapide exemple. Observez les temps exprimés en secondes...
D'autres applications plus pertinentes ? l'utilisation de comparateurs de prix, la consultation de multiples flux XML/RSS, la mise en oeuvre de multi moteur de recherche, l'usage de services web, l'exécution de tâches de fond, la maintenance de base de données...
Il ne fait aucun doute que de très nombreuses applications actuelles ou futures gagneraient énormément à profiter de cette formidable astuce (et de toutes les autres) offerte par PHP5.
Mais chut... que cela reste entre nous...
Commentaires (7)