3 coroutines, 2 connexions en pool — gestion automatique via $stmt et transactions

Code — un PDO avec pool, 3 coroutines
// Un seul objet PDO avec un pool de 2 connexions
$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() acquiert auto. une conn du pool
$stmt = $pdo->prepare("SELECT * FROM users WHERE id=?");
$stmt->execute([$i]); // attend la BD
$user = $stmt->fetch();
processUser($user);
// $stmt sort du scope -> refcount=0
// la conn retourne auto. au pool !
});
}
PDO Pool (ATTR_POOL_MAX: 2)
🔌
Connexion #1
disponible
🔌
Connexion #2
disponible
File d'attente :
vide
Coroutine 1
prête
Coroutine 2
prête
Coroutine 3
prête
Chronologie d'exécution 0 ms
Coroutine 1
Coroutine 2
Coroutine 3
015304555ms
CPU actif
Attente BD
Attente pool
0 ms
Temps total
0 ms
Attente BD
0 ms
Attente pool
0 ms
Temps gagné

Cliquez sur « Lancer » pour commencer

Cette visualisation montre comment le pool de connexions PDO gère automatiquement les ressources. Une connexion est épinglée tant que $stmt existe ou qu'une transaction est active. Quand $stmt est détruit et qu'il n'y a pas de transaction, la connexion retourne automatiquement au pool.