PHP RFC: True Async

Das TrueAsync-Projekt wurde etwa ein Jahr lang über den offiziellen RFC-Prozess auf wiki.php.net vorangetrieben. Zwei RFCs wurden veröffentlicht, die das grundlegende Nebenläufigkeitsmodell und strukturierte Nebenläufigkeit beschreiben.

RFC #1 — PHP True Async

Autor: Edmond [HT]Version: 1.7Zielversion: PHP 8.6+Draft

Das Haupt-RFC, das das Nebenläufigkeitsmodell für PHP definiert. Beschreibt Coroutinen, Funktionen spawn() / await() / suspend(), das Coroutine-Objekt, Awaitable- und Completable-Interfaces, den kooperativen Abbruchmechanismus, Fiber-Integration, Fehlerbehandlung und Graceful Shutdown.

Schlüsselprinzipien:

  • Minimale Änderungen am bestehenden Code zur Aktivierung von Nebenläufigkeit
  • Coroutinen bewahren die Illusion sequentieller Ausführung
  • Automatisches Umschalten der Coroutinen bei I/O-Operationen
  • Kooperativer Abbruch — „cancellable by design"
  • Standard-C-API für Erweiterungen

RFC auf wiki.php.net lesen →

RFC #2 — Scope und strukturierte Nebenläufigkeit

Autor: Edmond [HT]Version: 1.0Draft

Eine Erweiterung des Basis-RFC. Führt die Klasse Scope ein, die die Lebensdauer von Coroutinen an den lexikalischen Gültigkeitsbereich bindet. Beschreibt die Scope-Hierarchie, Fehlerausbreitung, die „Zombie"-Coroutinen-Richtlinie und kritische Abschnitte über protect().

Was es löst:

  • Verhinderung von Coroutinen-Lecks außerhalb des Scope
  • Automatische Ressourcenbereinigung beim Verlassen des Scope
  • Hierarchischer Abbruch: Abbruch des Elternteils → Abbruch aller Kinder
  • Schutz kritischer Abschnitte vor Abbruch
  • Deadlock- und Self-Await-Erkennung

RFC auf wiki.php.net lesen →

Wie diese RFCs zusammenhängen

Das erste RFC definiert Low-Level-Primitive — Coroutinen, Basisfunktionen und C-API für Erweiterungen. Das zweite RFC fügt strukturierte Nebenläufigkeit hinzu — Mechanismen zur Verwaltung von Coroutinen-Gruppen, die nebenläufigen Code sicher und vorhersagbar machen.

Zusammen bilden sie ein vollständiges asynchrones Programmiermodell für PHP:

RFC #1: True AsyncRFC #2: Scope
EbenePrimitiveVerwaltung
Bietetspawn(), await(), CoroutineScope, TaskGroup, protect()
AnalogienGo Goroutines, Kotlin CoroutinesKotlin CoroutineScope, Python TaskGroup
ZielNebenläufigen Code ausführenSichere Lebenszyklusverwaltung

Aktueller RFC-Status

Derzeit ist das Projekt TrueAsync auf Unsicherheit im RFC-Prozess gestoßen. In den letzten Monaten ist die Diskussion praktisch zum Stillstand gekommen, und es gibt keine Klarheit über seine Zukunft. Es ist ziemlich offensichtlich, dass das RFC keine Abstimmung bestehen kann, und es gibt keine Möglichkeit, dies zu ändern.

Aus diesen Gründen wird der RFC-Prozess derzeit als eingefroren betrachtet, und das Projekt wird sich innerhalb der offenen Community weiterentwickeln, ohne „offiziellen" Status.

"It's easier to ask forgiveness than it is to get permission."

— Grace Hopper

An der Diskussion teilnehmen

RFCs werden auf der Mailingliste internals@lists.php.net und auf GitHub Discussions diskutiert.

Treten Sie auch der Diskussion auf Discord bei.