Interaktiv

Wie Koroutinen funktionieren

Zwei Koroutinen teilen sich effizient die CPU-Zeit: Während die eine auf die Datenbank oder das Netzwerk wartet, verrichtet die andere nützliche Arbeit.

Koroutine 1 · BenutzerverarbeitungIteration: 0/3
$coro1 = spawn(function() {
$pdo = new PDO($dsn);
foreach ([1,2,3] as $id) {
$stmt = $pdo->prepare("SELECT * FROM users WHERE id=?");
$stmt->execute([$id]); // ⏳ 15ms
$user = $stmt->fetch();
processUser($user);
}
});
Koroutine 2 · Protokolle & BenachrichtigungenIteration: 0/3
$coro2 = spawn(function() {
$pdo = new PDO($dsn);
$socket = fsockopen($host, 9000);
foreach (['login','click','logout'] as $e) {
$stmt = $pdo->prepare("INSERT INTO logs VALUES(?)");
$stmt->execute([$e]); // ⏳ 12ms
fwrite($socket, $e); // ⏳ 20ms
}
});

Ausführungszeitleiste

CPU: Arbeitet0 ms
CPU
Coroutine 1
Coroutine 2
0255075100
Geschwindigkeit
CPU arbeitetCPU (Koroutine 2)Warten auf DBWarten auf Netzwerk
0 ms
Gesamtzeit
0 ms
DB-Wartezeit
0 ms
Netzwerk-Wartezeit
0 ms
Eingesparte Zeit

Kooperatives Multitasking

Diese Visualisierung zeigt, wie sich zwei Koroutinen die CPU effizient teilen. Während die eine auf eine Antwort von Datenbank oder Netzwerk wartet, verrichtet die andere nützliche Arbeit, und kein Thread wird jemals blockiert. Im Vergleich zur sequentiellen Ausführung (162 ms) erledigt die kooperative Planung dieselbe Arbeit in 108 ms.