인터랙티브
코루틴의 작동 방식
두 코루틴이 CPU 시간을 효율적으로 공유합니다. 하나가 데이터베이스나 네트워크를 기다리는 동안 다른 하나가 유용한 작업을 수행합니다.
코루틴 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)DB 대기네트워크 대기
0 ms
전체 시간
0 ms
DB 대기
0 ms
네트워크 대기
0 ms
절약된 시간
협력적 멀티태스킹
이 시각화는 두 코루틴이 CPU를 효율적으로 공유하는 방식을 보여줍니다. 하나가 데이터베이스나 네트워크의 응답을 기다리는 동안 다른 하나가 유용한 작업을 수행하며, 어떤 스레드도 절대 블로킹되지 않습니다. 순차 실행(162 ms)과 비교하면 협력적 스케줄링은 동일한 작업을 108 ms에 완료합니다.