Interattivo
Come funzionano le coroutine
Due coroutine condividono efficientemente il tempo di CPU: mentre una attende il database o la rete, l'altra svolge lavoro utile.
Coroutine 1 · Elaborazione utentiIterazione: 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 · Log e notificheIterazione: 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
}
});
Cronologia di esecuzione
CPU: In esecuzione0 ms
CPU
Coroutine 1
Coroutine 2
0255075100
Velocità
CPU attivaCPU (coroutine 2)Attesa del DBAttesa della rete
0 ms
Tempo totale
0 ms
Attesa DB
0 ms
Attesa rete
0 ms
Tempo risparmiato
Multitasking cooperativo
Questa visualizzazione mostra come due coroutine condividano efficientemente la CPU. Mentre una attende una risposta dal database o dalla rete, l'altra svolge lavoro utile, e nessun thread si blocca mai. Rispetto all'esecuzione sequenziale (162 ms), la pianificazione cooperativa completa lo stesso lavoro in 108 ms.