Інтерактивно
Як працюють корутини
Дві корутини ефективно ділять процесорний час: поки одна чекає на базу даних або мережу, інша виконує корисну роботу.
Корутина 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
}
});
Хронологія виконання
CPU: Працює0 ms
CPU
Coroutine 1
Coroutine 2
0255075100
Швидкість
CPU працюєCPU (корутина 2)Очікування БДОчікування мережі
0 ms
Усього часу
0 ms
Очікування БД
0 ms
Очікування мережі
0 ms
Заощаджено
Кооперативна багатозадачність
Візуалізація показує, як дві корутини ефективно ділять процесор. Поки одна чекає на відповідь від бази даних або мережі, інша виконує корисну роботу, і жоден потік не блокується. Порівняно з послідовним виконанням (162 мс) кооперативне планування справляється з тією ж роботою за 108 мс.