Start · Sprachen · PHP · Referenz · eio_nready

eio_nready

Funktion

Gibt die Anzahl der noch nicht bearbeiteten (fertigen, aber noch nicht verarbeiteten) Anfragen in der <code>eio</code>-Warteschlange zurück.

Kategorie: io

Signatur

eio_nready(): int

Beschreibung

eio_nready() liefert die Anzahl der Anfragen, die von der libeio-Bibliothek bereits abgeschlossen wurden, aber noch nicht durch den Event-Loop abgerufen bzw. verarbeitet worden sind. Diese Anfragen befinden sich in einem Zustand, in dem sie fertig sind und nur noch abgeholt werden müssen.

Die Funktion ist nützlich, wenn man den aktuellen Zustand der eio-Verarbeitungspipeline überwachen möchte – etwa um zu entscheiden, ob und wann eio_event_loop() aufgerufen werden soll. Ist der Rückgabewert größer als 0, stehen fertige Ergebnisse bereit, die abgerufen werden können.

Zusammen mit den Schwesterfunktionen eio_nreqs(), eio_nthreads() und eio_npending() ermöglicht eio_nready() eine detaillierte Zustandsüberwachung der asynchronen I/O-Verarbeitung, was besonders in Performance-kritischen oder langlebigen Server-Prozessen hilfreich ist.

Rückgabewert

Typ
int
Beschreibung
Gibt die Anzahl der bereits abgeschlossenen, aber noch nicht verarbeiteten Anfragen als nicht-negative ganze Zahl zurück.

Beispiele

Zustand der eio-Pipeline überwachen

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

// Einige asynchrone Datei-Operationen starten
eio_open('/tmp/testfile.txt', EIO_O_RDONLY, 0, EIO_PRI_DEFAULT, function($data, $result) {
    if ($result !== -1) {
        eio_close($result);
    }
}, null);

eio_stat('/tmp', EIO_PRI_DEFAULT, function($data, $result) {
    // Statistik verarbeiten
}, null);

// Anzahl der noch nicht bearbeiteten (fertigen) Anfragen abfragen
$nready = eio_nready();
echo "Fertige, noch nicht verarbeitete Anfragen: " . $nready . PHP_EOL;

// Event-Loop ausführen, um alle Anfragen zu verarbeiten
eio_event_loop();

echo "Nach Event-Loop – nready: " . eio_nready() . PHP_EOL;
Fertige, noch nicht verarbeitete Anfragen: 0 Nach Event-Loop – nready: 0

Statusüberwachung aller eio-Warteschlangen

<?php
// Mehrere asynchrone Operationen einreihen
for ($i = 0; $i < 5; $i++) {
    eio_nop(EIO_PRI_DEFAULT, function($data, $result) {
        // No-op Callback
    }, null);
}

// Überblick über den aktuellen Pipeline-Zustand
echo "Ausstehende Anfragen (gesamt): " . eio_nreqs()    . PHP_EOL;
echo "Noch ausstehend (pending):    " . eio_npending()  . PHP_EOL;
echo "Fertig, nicht abgeholt:       " . eio_nready()    . PHP_EOL;
echo "Aktive Threads:               " . eio_nthreads()  . PHP_EOL;

// Verarbeitung anstoßen
eio_event_loop();

echo "Nach Event-Loop – nready: " . eio_nready() . PHP_EOL;
Ausstehende Anfragen (gesamt): 5 Noch ausstehend (pending): 5 Fertig, nicht abgeholt: 0 Aktive Threads: 1 Nach Event-Loop – nready: 0

// Wichtig · Fallstricke

Hinweis: Die eio-Extension ist nicht standardmäßig in PHP enthalten und muss separat installiert werden (z. B. via PECL: pecl install eio). Sie ist primär für Linux-Systeme gedacht und nutzt intern die libeio-Bibliothek.

Der Rückgabewert von eio_nready() kann sich zwischen zwei Aufrufen verändern, da Hintergrund-Threads jederzeit neue Ergebnisse liefern können. Die Funktion sollte daher nur zur Diagnose und Steuerung des Event-Loops verwendet werden, nicht als harte Synchronisierungsgarantie.