Deux coroutines partagent efficacement le temps CPU

Coroutine 1 — Traitement utilisateurs 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 — Journalisation + Notifications 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
}
});
Chronologie d'execution 0 ms
Coroutine 1 prete
Coroutine 2 prete
0255075100ms
CPU :
En attente
CPU en travail
Attente BDD
Attente reseau
0 ms
Temps total
0 ms
Attente BDD
0 ms
Attente reseau
0 ms
Temps economise

Cliquez sur "Lecture" pour demarrer

Cette visualisation montre comment deux coroutines partagent efficacement le CPU. Pendant que l'une attend une reponse de la base de donnees ou du reseau, l'autre effectue un travail utile. C'est le multitache cooperatif.