Interactif

Comment fonctionnent les coroutines

Deux coroutines partagent efficacement le temps CPU : pendant que l'une attend la base de données ou le réseau, l'autre effectue un travail utile.

Coroutine 1 · Traitement des utilisateursItération: 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 · Journaux et notificationsItération: 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
}
});

Chronologie d'exécution

CPU: Travaille0 ms
CPU
Coroutine 1
Coroutine 2
0255075100
Vitesse
CPU actifCPU (coroutine 2)Attente de la BDAttente du réseau
0 ms
Temps total
0 ms
Attente BD
0 ms
Attente réseau
0 ms
Temps économisé

Multitâche coopératif

Cette visualisation montre comment deux coroutines partagent efficacement le CPU. Pendant que l'une attend une réponse de la base de données ou du réseau, l'autre effectue un travail utile, et aucun thread ne se bloque jamais. Par rapport à une exécution séquentielle (162 ms), l'ordonnancement coopératif accomplit le même travail en 108 ms.