Signatur
Beschreibung
eio_npending() liefert die Anzahl der EIO-Requests, die bereits vom Betriebssystem abgeschlossen wurden, deren Callback-Funktion jedoch noch nicht aufgerufen wurde. Diese Requests befinden sich in der internen Warteschlange und warten auf die Verarbeitung durch die Event-Loop.
Die Funktion ist besonders nützlich, um den Rückstau ausstehender Callbacks zu überwachen. In Kombination mit eio_poll() kann damit gesteuert werden, ob und wie oft die Callback-Verarbeitung angestoßen werden soll — ohne unnötig blockierende Aufrufe durchzuführen.
Typischerweise wird eio_npending() in reaktiven Event-Schleifen (z. B. mit libevent oder libev) eingesetzt, um zu prüfen, ob noch ausstehende Callbacks vorhanden sind, bevor eio_poll() aufgerufen wird. So lassen sich unnötige Iterationen der Schleife vermeiden.
Rückgabewert
0 zurück, wenn keine solchen Requests vorhanden sind.Beispiele
Pending Requests vor eio_poll() prüfen
<?php
// Datei asynchron öffnen
eio_open('/tmp/test.txt', EIO_O_CREAT | EIO_O_WRONLY, 0644, EIO_PRI_DEFAULT, function($data, $result) {
if ($result === -1) {
echo "Fehler beim Öffnen der Datei\n";
} else {
echo "Datei erfolgreich geöffnet, fd=$result\n";
eio_close($result);
}
});
// Event-Schleife simulieren
while (eio_nreqs() > 0 || eio_npending() > 0) {
echo "Ausstehende (completed, unhandled) Requests: " . eio_npending() . "\n";
eio_poll();
}
echo "Alle Requests verarbeitet.\n";
Kombination mit eio_nreqs und eio_nready
<?php
for ($i = 0; $i < 3; $i++) {
eio_open('/tmp/testfile_' . $i . '.txt', EIO_O_CREAT | EIO_O_WRONLY, 0644, EIO_PRI_DEFAULT, function($data, $result) use ($i) {
echo "Datei $data geöffnet\n";
if ($result !== -1) {
eio_close($result);
}
}, $i);
}
echo "Ausstehende Requests gesamt: " . eio_nreqs() . "\n";
echo "Abgeschlossen, unbehandelt: " . eio_npending() . "\n";
echo "Bereit zur Verarbeitung: " . eio_nready() . "\n";
// Alle Callbacks abarbeiten
while (eio_nreqs() > 0) {
eio_poll();
}
echo "Fertig. Pending nach Poll: " . eio_npending() . "\n";
// Wichtig · Fallstricke
Hinweis zur PECL-Erweiterung: eio_npending() ist Teil der EIO PECL-Erweiterung und steht nicht in Standard-PHP-Installationen zur Verfügung. Die Erweiterung muss separat installiert werden.
Der Unterschied zu eio_nready() ist wichtig: eio_nready() zählt Requests, die noch auf Ausführung warten, während eio_npending() jene zählt, die bereits ausgeführt wurden, deren Callback aber noch nicht aufgerufen wurde. eio_nreqs() hingegen gibt die Gesamtanzahl aktiver Requests zurück.