Warum braucht PHP Asynchronität?

PHP ist eine der letzten großen Sprachen, die noch keine eingebaute Unterstützung für nebenläufige Ausführung auf Sprachebene hat. Python hat asyncio, JavaScript basiert nativ auf einer Event Loop, Go hat Goroutines, Kotlin hat Coroutines. PHP verbleibt im Paradigma „eine Anfrage — ein Prozess”, obwohl die meisten realen Anwendungen den Großteil ihrer Zeit mit dem Warten auf I/O verbringen (IO Bound).

Das Fragmentierungsproblem

Heute wird Asynchronität in PHP durch Erweiterungen realisiert: Swoole, AMPHP, ReactPHP. Jede davon schafft ihr eigenes Ökosystem mit inkompatiblen APIs, eigenen Datenbanktreibern, HTTP-Clients und Servern.

Dies führt zu kritischen Problemen:

Die Lösung: Integration in den Kern

TrueAsync verfolgt einen anderen Ansatz — Asynchronität auf PHP-Kern-Ebene. Das bedeutet:

Transparenz

Bestehender synchroner Code funktioniert in Koroutinen ohne Änderungen. file_get_contents(), PDO::query(), curl_exec() — all diese Funktionen werden automatisch nicht-blockierend, wenn sie innerhalb einer Koroutine ausgeführt werden.

// Dieser Code läuft bereits nebenläufig!
spawn(function() {
    $data = file_get_contents('https://api.example.com/users');
    // Die Koroutine wird während der HTTP-Anfrage pausiert,
    // andere Koroutinen laufen weiter
});

Keine gefärbten Funktionen

Im Gegensatz zu Python (async def / await) und JavaScript (async / await) erfordert TrueAsync keine Markierung von Funktionen als asynchron. Jede Funktion kann in einer Koroutine ausgeführt werden — es gibt keine Trennung zwischen einer „synchronen” und „asynchronen” Welt.

Ein einheitlicher Standard

Das standardmäßige True Async ABI als Teil von Zend ermöglicht es jeder Erweiterung, nicht-blockierendes I/O zu unterstützen: MySQL, PostgreSQL, Redis, Dateioperationen, Sockets — alles über eine einzige Schnittstelle. Kein Duplizieren von Treibern für jedes Async-Framework mehr.

Abwärtskompatibilität

Bestehender Code funktioniert weiterhin, aber jetzt ist der gesamte PHP-Code standardmäßig asynchron. Überall.

PHP-Workload: Warum das gerade jetzt wichtig ist

Eine typische PHP-Anwendung (Laravel, Symfony, WordPress) verbringt 70–90% der Zeit mit dem Warten auf I/O: Datenbankabfragen, HTTP-Aufrufe an externe APIs, Dateien lesen. Die ganze Zeit sitzt die CPU untätig herum.

Mit Koroutinen wird diese Zeit effizient genutzt:

Szenario Ohne Koroutinen Mit Koroutinen
3 DB-Abfragen à 20ms 60ms ~22ms
HTTP + DB + Datei sequenziell parallel
10 API-Aufrufe 10 × Latenz ~1 × Latenz

Mehr erfahren: IO-Bound vs CPU-Bound, Nebenläufigkeitsstatistiken.

Praktische Szenarien

Siehe auch: