PHP RFC : True Async
Le projet TrueAsync progresse à travers le processus officiel de RFC sur wiki.php.net.
Deux RFC ont été publiés, décrivant le modèle de concurrence de base
et la concurrence structurée.
RFC #1 — PHP True Async
Le RFC principal définissant le modèle de concurrence pour PHP.
Décrit les coroutines, les fonctions spawn() / await() / suspend(),
l’objet Coroutine, les interfaces Awaitable et Completable,
le mécanisme d’annulation coopérative, l’intégration avec Fiber,
la gestion des erreurs et le graceful shutdown.
Principes clés :
- Modifications minimales du code existant pour activer la concurrence
- Les coroutines maintiennent l’illusion d’une exécution séquentielle
- Commutation automatique des coroutines lors des opérations I/O
- Annulation coopérative — « cancellable by design »
- API C standard pour les extensions
Lire le RFC sur wiki.php.net →
RFC #2 — Scope et concurrence structurée
Extension du RFC de base. Introduit la classe Scope, liant
la durée de vie des coroutines à la portée lexicale.
Décrit la hiérarchie des scopes, la propagation des erreurs,
la politique des coroutines « zombie » et les sections critiques via protect().
Ce qu’il résout :
- Prévention des fuites de coroutines hors du scope
- Nettoyage automatique des ressources à la sortie du scope
- Annulation hiérarchique : annulation du parent → annulation de tous les enfants
- Protection des sections critiques contre l’annulation
- Détection des deadlocks et du self-await
Lire le RFC sur wiki.php.net →
Comment ces RFC sont liés
Le premier RFC définit les primitives de bas niveau — coroutines, fonctions de base et API C pour les extensions. Le second RFC ajoute la concurrence structurée — des mécanismes de gestion de groupes de coroutines qui rendent le code concurrent sûr et prévisible.
Ensemble, ils forment un modèle complet de programmation asynchrone pour PHP :
| RFC #1 : True Async | RFC #2 : Scope | |
|---|---|---|
| Niveau | Primitives | Gestion |
| Fournit | spawn(), await(), Coroutine |
Scope, TaskGroup, protect() |
| Analogies | Go goroutines, Kotlin coroutines | Kotlin CoroutineScope, Python TaskGroup |
| Objectif | Exécuter du code concurrent | Gestion sûre du cycle de vie |
Participer à la discussion
Les RFC sont discutés sur la liste de diffusion internals@lists.php.net et sur GitHub Discussions.
Rejoignez également la conversation sur Discord.