코드 -- 풀을 사용하는 하나의 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
준비