Código — un PDO con pool, 3 corrutinas
// Un único objeto PDO con un pool de 2 conexiones
$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() adquiere automáticamente una conexión del pool
$stmt = $pdo->prepare("SELECT * FROM users WHERE id=?");
$stmt->execute([$i]); // espera respuesta de la BD
$user = $stmt->fetch();
processUser($user);
// $stmt sale del scope -> refcount=0
// ¡la conexión regresa al pool automáticamente!
});
}
PDO Pool (ATTR_POOL_MAX: 2)
Conexión #1
disponible
Conexión #2
disponible
Cola de espera:
vacía
Corrutina 1
lista
Corrutina 2
lista
Corrutina 3
lista