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.

Jérémy DECOOL

Jérémy DECOOL

Développeur depuis plus d'une décennie, je partage mes réflexions sur les bonnes pratiques de développement et d'architecture logicielle.