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.