Start · Sprachen · PHP · Referenz · eio_set_max_poll_reqs

eio_set_max_poll_reqs

Funktion

Legt die maximale Anzahl an Anfragen fest, die pro <code>eio_poll()</code>-Aufruf verarbeitet werden.

Kategorie: io

Signatur

eio_set_max_poll_reqs(int $nreqs): void

Beschreibung

eio_set_max_poll_reqs() begrenzt, wie viele asynchrone I/O-Anfragen die eio-Bibliothek pro Aufruf von eio_poll() abarbeitet. Damit lässt sich verhindern, dass ein einzelner Poll-Durchlauf zu viel CPU-Zeit beansprucht und andere Programmteile (z. B. einen Event-Loop) blockiert.

Sinnvoll ist diese Funktion vor allem in Umgebungen mit reaktiver Programmierung oder eigenem Event-Loop (z. B. in Kombination mit libevent, libev oder ReactPHP), bei denen Fairness zwischen verschiedenen I/O-Quellen wichtig ist. Durch ein niedriges Limit bleibt der Loop reaktionsfähig, weil eio_poll() frühzeitig zurückkehrt.

Ein Wert von 0 bedeutet, dass kein Limit gesetzt wird — eio_poll() verarbeitet dann alle verfügbaren fertigen Anfragen auf einmal. Höhere Werte erhöhen den Durchsatz pro Poll-Aufruf auf Kosten der Reaktivität.

Parameter

Name Typ Default Beschreibung
$nreqs Pflicht int Maximale Anzahl von Anfragen, die pro eio_poll()-Aufruf verarbeitet werden. 0 deaktiviert das Limit (unbegrenzt).

Rückgabewert

Typ
void
Beschreibung
Diese Funktion gibt keinen Wert zurück.

Beispiele

Limit auf 10 Requests pro Poll setzen

<?php
// Maximal 10 fertige eio-Anfragen pro eio_poll()-Durchlauf verarbeiten
eio_set_max_poll_reqs(10);

// Beispiel: Asynchrones Lesen einer Datei
eio_read(
    fopen('/etc/hostname', 'r'),
    100,
    0,
    EIO_PRI_DEFAULT,
    function ($data, $result) {
        echo "Gelesen: " . $result . PHP_EOL;
    }
);

// Event-Loop-Stub: Solange noch Anfragen ausstehen, poll aufrufen
while (eio_nreqs()) {
    eio_poll();
}
?>

Kein Limit — alle Requests auf einmal verarbeiten

<?php
// Limit deaktivieren: eio_poll() verarbeitet alle fertigen Anfragen
eio_set_max_poll_reqs(0);

$pending = 3;
for ($i = 0; $i < $pending; $i++) {
    eio_nop(EIO_PRI_DEFAULT, function () use (&$pending) {
        echo "NOP abgeschlossen" . PHP_EOL;
        $pending--;
    });
}

while (eio_nreqs()) {
    eio_poll();
}
?>
NOP abgeschlossen NOP abgeschlossen NOP abgeschlossen

// Wichtig · Fallstricke

Das Setzen eines zu niedrigen Limits kann dazu führen, dass viele eio_poll()-Aufrufe nötig sind, um alle Anfragen abzuarbeiten — dies erzeugt Overhead durch häufige Kontextwechsel. Ein zu hohes Limit hingegen kann einen Event-Loop für lange Zeit blockieren.

Diese Einstellung wirkt global für alle nachfolgenden eio_poll()-Aufrufe innerhalb des Prozesses. Sie sollte idealerweise einmalig beim Start der Anwendung konfiguriert werden.