Дві корутини ефективно розділяють процесорний час

Корутина 1 — Обробка користувачів Ітерація: 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);
}
});
Корутина 2 — Логування + Сповіщення Ітерація: 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
}
});
Часова шкала виконання 0 мс
Корутина 1 готова
Корутина 2 готова
0255075100мс
CPU:
Очікування
CPU працює
Очікування БД
Очікування мережі
0 мс
Загальний час
0 мс
Очікування БД
0 мс
Очікування мережі
0 мс
Зекономлений час

Натисніть "Старт", щоб почати

Ця візуалізація показує, як дві корутини ефективно розділяють CPU. Поки одна очікує відповіді від бази даних або мережі, інша виконує корисну роботу. Це кооперативна багатозадачність.