Pourquoi PHP a-t-il besoin d’asynchronie ?

PHP est l’un des derniers grands langages à ne pas disposer de support intégré pour l’exécution concurrente au niveau du langage. Python a asyncio, JavaScript est nativement construit sur une boucle d’événements, Go a les goroutines, Kotlin a les coroutines. PHP reste dans le paradigme « une requête — un processus », alors que la plupart des applications réelles passent l’essentiel de leur temps à attendre les I/O (IO Bound).

Le problème de la fragmentation

Aujourd’hui, l’asynchronie en PHP est réalisée via des extensions : Swoole, AMPHP, ReactPHP. Chacune crée son propre écosystème avec des APIs incompatibles, ses propres pilotes de bases de données, clients HTTP et serveurs.

Cela engendre des problèmes critiques :

La solution : intégration dans le cœur

TrueAsync propose une approche différente — l’asynchronie au niveau du cœur de PHP. Cela signifie :

Transparence

Le code synchrone existant fonctionne dans les coroutines sans modification. file_get_contents(), PDO::query(), curl_exec() — toutes ces fonctions deviennent automatiquement non bloquantes lorsqu’elles sont exécutées dans une coroutine.

// Ce code s'exécute déjà de manière concurrente !
spawn(function() {
    $data = file_get_contents('https://api.example.com/users');
    // la coroutine se suspend pendant la requête HTTP,
    // les autres coroutines continuent de s'exécuter
});

Pas de fonctions colorées

Contrairement à Python (async def / await) et JavaScript (async / await), TrueAsync ne nécessite pas de marquer les fonctions comme asynchrones. Toute fonction peut s’exécuter dans une coroutine — il n’y a pas de séparation entre un monde « synchrone » et « asynchrone ».

Un standard unifié

Le True Async ABI standard, intégré à Zend, permet à toute extension de supporter les I/O non bloquantes : MySQL, PostgreSQL, Redis, opérations sur les fichiers, sockets — le tout via une interface unique. Plus besoin de dupliquer les pilotes pour chaque framework asynchrone.

Rétrocompatibilité

Le code existant continue de fonctionner, mais désormais tout le code PHP est asynchrone par défaut. Partout.

PHP workload : pourquoi c’est important maintenant

Une application PHP typique (Laravel, Symfony, WordPress) passe 70 à 90 % de son temps à attendre les I/O : requêtes en BD, appels HTTP vers des APIs externes, lecture de fichiers. Pendant tout ce temps, le CPU reste inactif.

Avec les coroutines, ce temps est utilisé efficacement :

Scénario Sans coroutines Avec coroutines
3 requêtes BD de 20ms chacune 60ms ~22ms
HTTP + BD + fichier séquentiel parallèle
10 appels API 10 × latence ~1 × latence

En savoir plus : IO-Bound vs CPU-Bound, Statistiques de concurrence.

Scénarios pratiques

Voir aussi :