Start · Sprachen · PHP · Referenz · eio_npending

eio_npending

Funktion

Gibt die Anzahl der abgeschlossenen, aber noch nicht behandelten EIO-Requests zurück.

seit PHP 0.3.0 Kategorie: io

Signatur

eio_npending(): int

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

Typ
int
Beschreibung
Gibt die Anzahl der abgeschlossenen, aber noch nicht durch Callback behandelten EIO-Requests zurück. Gibt 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";
Ausstehende (completed, unhandled) Requests: 0 Datei erfolgreich geöffnet, fd=3 Alle Requests verarbeitet.

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";
Ausstehende Requests gesamt: 3 Abgeschlossen, unbehandelt: 0 Bereit zur Verarbeitung: 0 Datei 0 geöffnet Datei 1 geöffnet Datei 2 geöffnet Fertig. Pending nach Poll: 0

// 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.