Zwei Coroutinen teilen sich effizient die CPU-Zeit

Coroutine 1 — Benutzerverarbeitung Iteration: 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);
}
});
Coroutine 2 — Protokollierung + Benachrichtigungen Iteration: 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ührungs-Zeitachse 0 ms
Coroutine 1 bereit
Coroutine 2 bereit
0255075100ms
CPU:
Wartend
CPU arbeitet
Warten auf DB
Warten auf Netzwerk
0 ms
Gesamtzeit
0 ms
DB-Wartezeit
0 ms
Netzwerk-Wartezeit
0 ms
Eingesparte Zeit

Klicken Sie auf "Abspielen", um zu starten

Diese Visualisierung zeigt, wie zwei Coroutinen die CPU effizient teilen. Während eine auf eine Antwort von der Datenbank oder dem Netzwerk wartet, erledigt die andere nützliche Arbeit. Das ist kooperatives Multitasking.