PHP-Anwendungen, die Nebenläufigkeit benötigen — etwa mehrere APIs gleichzeitig aufrufen oder eine Datenbank abfragen, während eine Datei gelesen wird —, waren bislang auf Bibliotheken wie AMPHP, ReactPHP oder Swoole angewiesen. Das True-Async-Projekt geht einen anderen Weg: Es implementiert ein Nebenläufigkeitsmodell direkt in der PHP-Engine, und sein RFC ist auf php.watch mit der Zielversion PHP 8.6 gelistet.
Die API dreht sich um wenige Konzepte. spawn() erzeugt eine Coroutine, eine Ausführungseinheit, die pausiert und fortgesetzt werden kann; await() wartet auf das Ergebnis einer Coroutine; Scope verwaltet die Lebensdauer einer Gruppe von Coroutines und kann alle abbrechen, wenn eine fehlschlägt; der Abbruch ist so konzipiert, dass keine halbfertigen Daten zurückbleiben. Werden drei sequenzielle Ein-Sekunden-Operationen in spawn() verpackt und über await_all_or_fail() mit Timeout eingesammelt, laufen sie nebenläufig — die Gesamtwartezeit nähert sich der langsamsten Operation statt der Summe.
Anders als async/await in JavaScript oder Python vermeidet True Async „farbige Funktionen“: Es gibt kein async-Schlüsselwort, und gewöhnlicher synchroner Code läuft unverändert in einer Coroutine. Möglich wird das durch Änderungen am Zend-Kern sowie an den I/O-, Datenbank- und Socket-Schichten. Im Kern handelt es sich um kooperatives Multitasking — ein PHP-Prozess, ein Thread —, bei dem die CPU zu einer anderen Coroutine wechselt, sobald die aktuelle auf I/O wartet. Eine interaktive Visualisierung auf der Projektseite demonstriert dies mit zwei Coroutines (eine verarbeitet Benutzerdaten, eine protokolliert und versendet Benachrichtigungen), die sich die CPU-Zeit teilen.
Das Projekt ist mehr als ein Papierentwurf. Die aktuelle Version v0.8.4, als „Experimental Core“ gekennzeichnet, enthält funktionierende Coroutines, nicht-blockierendes I/O für Funktionen wie fread, file_get_contents und cURL, eingebautes PDO-Connection-Pooling, native Thread-Unterstützung über spawn_thread() für CPU-parallele Arbeit und sogar einen in C geschriebenen HTTP/1.1-, HTTP/2- und HTTP/3-Server, der ohne Reverse-Proxy im PHP-Prozess läuft. Die Erweiterung lässt sich unter PHP 8.5+ über einen offiziellen Installer oder ein vorgefertigtes Docker-Image installieren; sie ist noch experimentell und nicht für den Produktiveinsatz empfohlen.
Mehr als 70 Standard-PHP-Funktionen wurden so angepasst, dass sie innerhalb einer Coroutine automatisch nicht-blockierend werden, außerhalb aber exakt wie bisher funktionieren — also keine Breaking Changes für bestehenden Code. Abgedeckt sind DNS (gethostbyname() und Verwandte), PDO MySQL und PgSQL, MySQLi, natives PostgreSQL, cURL, Sockets, Datei- und Stream-I/O (fopen(), fread(), file_put_contents(), flock()), Stream-Sockets, Prozessausführung (proc_open(), exec(), shell_exec()), Timer (sleep(), usleep()) und Output-Buffering mit pro Coroutine isolierten Puffern. flock(), ein naturgemäß blockierender Systemaufruf, wird in einen Thread-Pool ausgelagert, damit andere Coroutines weiterlaufen. Noch nicht unterstützt werden Verzeichnisoperationen wie opendir() und mkdir() sowie einige PDO-Treiber wie Oracle und SQLite — als weniger prioritär eingestuft, da lokale Metadatenoperationen meist schnell genug sind.
Die Roadmap peilt ein stabiles v1.0 im November 2026 an, passend zum PHP-8.6-Zeitplan: PHP 8.6 Alpha 1 erschien am 2. Juli 2026, Beta 1 wird um Mitte August 2026 erwartet, die Finalversion ist für den 19. November 2026 geplant. Ob das Feature tatsächlich in 8.6 landet, bleibt offen — bei großen Kernänderungen gibt es Gewissheit erfahrungsgemäß erst kurz vor der Veröffentlichung.
Für Entwickler, die mit der Erweiterung experimentieren, bietet das Dev-only-Composer-Paket true-async/ide-helper Autovervollständigung, Inline-Dokumentation und Stubs für PhpStorm, PHPStan und Psalm — vom Async-Kern über den HTTP-Server bis zum ClickHouse-Client. Nützlich, da sich die API zwischen den Releases noch ändert.
Kommentare
Noch keine Kommentare — schreib den ersten.
Starte die Diskussion
Kein Konto, kein Passwort nötig — gib einfach deine E-Mail-Adresse ein, wir senden dir einen einmaligen Anmelde-Link. Beim ersten Mal bist du damit automatisch angemeldet.
Deine Bewertung wird nach der Anmeldung automatisch übernommen.
Schau in dein Postfach
Wir haben einen Anmelde-Link an … gesendet. Öffne ihn auf diesem Gerät — dieser Tab meldet dich automatisch an.
Warte auf deinen Klick …
·