3 Koroutinen, 2 gepoolte Verbindungen — automatische Verwaltung via $stmt und Transaktionen

Code — ein PDO mit Pool, 3 Koroutinen
// Ein PDO-Objekt mit einem Pool von 2 Verbindungen
$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() holt automatisch eine Verb. aus dem Pool
$stmt = $pdo->prepare("SELECT * FROM users WHERE id=?");
$stmt->execute([$i]); // wartet auf DB
$user = $stmt->fetch();
processUser($user);
// $stmt verlässt den Scope -> refcount=0
// Verb. kehrt automatisch zum Pool zurück!
});
}
PDO Pool (ATTR_POOL_MAX: 2)
🔌
Verbindung #1
verfügbar
🔌
Verbindung #2
verfügbar
Warteschlange:
leer
Koroutine 1
bereit
Koroutine 2
bereit
Koroutine 3
bereit
Ausführungszeitachse 0 ms
Koroutine 1
Koroutine 2
Koroutine 3
015304555ms
CPU arbeitet
Warten auf DB
Warten auf Pool
0 ms
Gesamtzeit
0 ms
DB-Wartezeit
0 ms
Pool-Wartezeit
0 ms
Zeitersparnis

Klicken Sie auf "Abspielen", um zu starten

Diese Visualisierung zeigt, wie der PDO-Verbindungspool Ressourcen automatisch verwaltet. Eine Verbindung ist gebunden, solange $stmt existiert oder eine Transaktion aktiv ist. Wenn $stmt zerstört wird und keine Transaktion aktiv ist, kehrt die Verbindung automatisch zum Pool zurück.