PHP a beau être un langage qui n'a pas à rougir de la comparaison avec les "gros" langages tels que Java, il lui manque néamoins quelques fonctionnalités avancées qui simplifieraient la vie du codeur, et éventuellement pourraient améliorer les performances de manières significative.

Parmi ces fonctionallités "manquantes", le multi-threading est probablement la plus importante à mon sens. Sur les plateforme de type UNIX, il est possible de dupliquer un processus grace à l'utilisation de l'extension PCNTL et son instruction pcntl_fork(), mais pas de créer plusieurs threads. Pour information, le thread est la plus petite entité en terme d'instruction processeurs. Les différents threads d'un processus sont répartis en terme de traitement par le processeur afin de simuler leurs executions simultanées.

Vraisemblablement, le problème a déjà commencé à être abordé par des codeurs du PHP Group, et ce depuis un bon moment. PHP5 ne gérant pas nativement le multi-threading, il s'agit donc d'une extension PECL. Pour rappel, PECL est un sytème d'extensions la plupart du temps codées en C/C++, et compilées à la manière des extensions "natives" de PHP (MySQL, Oracle, Sockets : celles que l'on active dans le php.ini). On trouve ainsi dans la liste de ces extensions de quoi gérer le format zip, ou se connecter à un serveur POP3...
Pour les experts en C/C++ qui veulent éventuellement y toucher, ou développer leurs propres extensions natives, vous trouverez sur le site de PECL les instructions nécessaires à un tel codage.

Attention à ne pas confondre ces possibilités d'extension avec les extensions PEAR, qui elles sont codées en PHP. Pour les flasheurs, ca correspond à la différence entre les classes fournies avec Flash, codées en AS, et les classes "intrinsic", natives au Player Flash. En PHP, il est possible d'en rajouter étant donné que tout se passe sur le serveur ! 8)

Pour revenir à nos moutons, on trouve dans le repository CVS du PHP Group, une extension en cours de développement nommée php_threads ... que l'on retrouve dans les extensions PECL des Snapshots PHP que ce soit pour la branche stable (4.3.x) ou la branche instable (5.0.x), compilée sous forme de dll pour Windows. N'étant pas expert de l'utilisation des threads, je ne me suis pas encore risqué à l'utiliser, mais pour ceux qui s'y connaissent déjà, voici les fonctions que l'on retrouve dans la source en C de l'extension :

  • thread_start
  • thread_include
  • thread_set
  • thread_get
  • thread_mutex_init
  • thread_mutex_destroy
  • thread_lock
  • thread_lock_try
  • thread_unlock

Affaire à suivre donc ! ;)

MAJ : J'ai trouvé sur le web une autre initiative pour l'implémentation des Threads en PHP, dont la syntaxe me plait beaucoup plus. Elle est faite pour coller complètement à la syntaxe Java, avec une approche Objet. Il suffit pour créer un thread de dériver la classe Thread justement ... Les sources sont disponibles au téléchargement, mais aucune version compilée à priori, ni aucune page dédiée, ou doc. A voir l'exemple, c'est quand-même beaucoup plus convivial qu'un ensemble de fonctions. N'étant qu'un début d'essai de prémice, ce module a de grandes chances d'être hautement instable (lire le README). A utiliser avec précautions donc ! :)

A voir les sources, l'API du Zend Engine semble vraiment assez accessible, et pour un développeur trés calé, il ne devrait pas être si difficile que ca de finir le travail entamé je pense (faudrait que je me remette au C/C++ moi :P). Il n'y a pas de volontaires ? Ce serait le bonheur de pouvoir avoir une implémentation stable des threads ... ^^