Signatur
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
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();
}
?>
// 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.