3개의 코루틴, 2개의 풀 커넥션 -- $stmt와 트랜잭션을 통한 자동 관리

코드 -- 풀을 사용하는 하나의 PDO, 3개의 코루틴
// 2개의 커넥션 풀을 가진 단일 PDO 객체
$pdo = new PDO($dsn, $user, $pass, [
PDO::ATTR_POOL_ENABLED => true,
PDO::ATTR_POOL_MAX => 2,
]);
for ($i = 1; $i <= 3; $i++) {
spawn(function() use ($pdo, $i) {
// prepare()가 풀에서 커넥션을 자동 획득
$stmt = $pdo->prepare("SELECT * FROM users WHERE id=?");
$stmt->execute([$i]); // DB 응답 대기
$user = $stmt->fetch();
processUser($user);
// $stmt가 스코프를 벗어남 -> refcount=0
// 커넥션이 자동으로 풀에 반환!
});
}
PDO 풀 (ATTR_POOL_MAX: 2)
🔌
커넥션 #1
사용 가능
🔌
커넥션 #2
사용 가능
대기열:
비어 있음
코루틴 1
준비
코루틴 2
준비
코루틴 3
준비
실행 타임라인 0 ms
코루틴 1
코루틴 2
코루틴 3
015304555ms
CPU 작업 중
DB 대기 중
풀 대기 중
0 ms
총 시간
0 ms
DB 대기
0 ms
풀 대기
0 ms
절약 시간

"재생"을 클릭하여 시작하세요

이 시각화는 PDO 커넥션 풀이 리소스를 자동으로 관리하는 방법을 보여줍니다. $stmt가 존재하거나 트랜잭션이 활성 상태인 동안 커넥션은 고정됩니다. $stmt가 소멸되고 트랜잭션이 없으면 커넥션은 자동으로 풀에 반환됩니다.