Gérer du multithread en PHP avec pthreads

Cet article a été publié depuis plus de 6 mois, cela signifie que le contenu peut ne plus être d'actualité.

PHP est par "défaut" un langage mono-thread et ne permet donc, par définition, de ne gérer qu'un seul processus à la fois. Or il peut s'avérer extrêmement avantageux de gérer plusieurs processus afin d'effectuer un certain nombre de tâches en parallèle. Il existe heureusement une extension PECL pour faire cela : pthreads.

« pthreads est une API orientée objet qui permet le multi-threading en PHP. Il inclut tous les outils nécessaires pour créer des applications multi-threadées pour le Web ou pour la console. Les applications PHP peuvent créer, lire, écrire, exécuter et synchroniser des Threads, des Workers, et des objets Threaded. »

Tout cela de manière très simple. La seule contrainte est que l'extension se base sur les threads POSIX et nécessitera donc l'installation du projet pthreads-win32 pour pouvoir fonctionner sous Windows.

Voici un exemple très simple de l'utilisation de l'extension :

<?php
$thread = new class extends Thread {
    public function run() {
        echo "Hello World\n";
    }
};

$thread->start() && $thread->join();
?>

J'ai par ailleurs publié une image Docker permettant d'exécuter PHP 7.0 préconfiguré avec l'extension pthreads. Tout cela est disponible sur le Docker Hub.