Start · Sprachen · PHP · Referenz · eio_nreqs

eio_nreqs

Funktion

Gibt die Anzahl der aktuell zu verarbeitenden (ausstehenden) EIO-Requests zurück.

Kategorie: io

Signatur

eio_nreqs(): int

Beschreibung

eio_nreqs() liefert die Anzahl der Requests, die von der EIO-Erweiterung noch zu verarbeiten sind. Das umfasst alle Requests, die in die Warteschlange eingereiht wurden, aber noch nicht abgeschlossen sind.

Die Funktion ist nützlich, um den aktuellen Zustand der EIO-Ereignisschleife zu überwachen. So kann man beispielsweise prüfen, ob noch offene asynchrone I/O-Operationen existieren, bevor das Programm beendet wird oder in einen Wartezustand übergeht.

Sie wird häufig in Kombination mit eio_event_loop() oder einer externen Ereignisschleife (z. B. libevent oder libev) eingesetzt, um die Schleife so lange am Laufen zu halten, wie noch unerledigte Requests vorhanden sind.

Rückgabewert

Typ
int
Beschreibung
Gibt die Anzahl der aktuell ausstehenden EIO-Requests als nicht-negativen Integer zurück. Sind keine Requests in der Warteschlange, wird 0 zurückgegeben.

Beispiele

Einfache Prüfung auf ausstehende EIO-Requests

<?php
// Voraussetzung: eio-Extension ist installiert und geladen

// Einen asynchronen Stat-Request einstellen
eio_stat('/tmp', function ($data, $result) {
    echo "Stat abgeschlossen.\n";
});

// Anzahl der noch zu verarbeitenden Requests ausgeben
$pending = eio_nreqs();
echo "Ausstehende Requests vor Event-Loop: " . $pending . "\n";

// Event-Loop ausführen, bis alle Requests abgearbeitet sind
eio_event_loop();

echo "Ausstehende Requests nach Event-Loop: " . eio_nreqs() . "\n";
Ausstehende Requests vor Event-Loop: 1 Stat abgeschlossen. Ausstehende Requests nach Event-Loop: 0

Event-Loop solange laufen lassen, wie Requests ausstehen

<?php
// Mehrere asynchrone Lese-Operationen einstellen
for ($i = 0; $i < 3; $i++) {
    eio_open('/tmp/testfile_' . $i . '.txt', EIO_O_RDONLY, 0, null, function ($data, $result) use ($i) {
        echo "Datei geöffnet, fd=" . $result . "\n";
        if ($result > 0) {
            eio_close($result);
        }
    });
}

// Manuelles Polling: solange Requests vorhanden sind, Event-Loop aufrufen
while (eio_nreqs() > 0) {
    eio_poll();
}

echo "Alle Requests abgearbeitet.\n";

// Wichtig · Fallstricke

Hinweis: eio_nreqs() gibt nur die Anzahl der noch nicht abgeschlossenen Requests zurück. Requests, die bereits fertig sind, aber deren Callback noch nicht aufgerufen wurde, können ebenfalls einbezogen sein – das genaue Verhalten hängt vom Zeitpunkt des Aufrufs relativ zur Ereignisschleife ab.

Die EIO-Erweiterung ist nicht standardmäßig in PHP enthalten und muss separat über PECL installiert werden. Sie ist primär für Unix-ähnliche Systeme (Linux, macOS) ausgelegt.