Start · Sprachen · PHP · Referenz · eio_set_max_poll_time

eio_set_max_poll_time

Funktion

Setzt die maximale Zeit (in Sekunden), die <code>eio_poll()</code> beim Abfragen abgeschlossener Anfragen blockieren darf.

Kategorie: io

Signatur

eio_set_max_poll_time(float $nseconds): void

Beschreibung

eio_set_max_poll_time() begrenzt die Zeitspanne, die eio_poll() bei einem einzigen Aufruf maximal warten darf, bevor es die Kontrolle an den aufrufenden Code zurückgibt. Der Wert wird als Gleitkommazahl in Sekunden angegeben, z. B. 0.1 für 100 Millisekunden.

Diese Einstellung ist besonders nützlich in ereignisgesteuerten Anwendungen oder bei der Integration der eio-Erweiterung in eine Event-Loop (z. B. libevent, libev). Ohne eine solche Begrenzung könnte eio_poll() zu lange blockieren und damit die Verarbeitung anderer Ereignisse verzögern.

Wird die maximale Poll-Zeit auf einen sehr kleinen Wert gesetzt, kehrt eio_poll() schnell zurück, auch wenn noch nicht alle abgeschlossenen Anfragen verarbeitet wurden. Ein zu groß gewählter Wert kann hingegen die Reaktionsfähigkeit der Anwendung verringern.

Die Funktion wirkt sich global auf alle nachfolgenden Aufrufe von eio_poll() aus und sollte daher idealerweise einmalig beim Initialisieren der Anwendung gesetzt werden.

Parameter

Name Typ Default Beschreibung
$nseconds Pflicht float Die maximale Wartezeit in Sekunden, die eio_poll() blockieren darf. Werte kleiner als 0 oder gleich 0 bewirken, dass eio_poll() sofort zurückkehrt, ohne auf abgeschlossene Anfragen zu warten.

Rückgabewert

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

Beispiele

Maximale Poll-Zeit in einer einfachen Event-Loop setzen

<?php
// eio-Erweiterung muss geladen sein

// Maximale Poll-Zeit auf 50 Millisekunden begrenzen
eio_set_max_poll_time(0.05);

// Eine asynchrone Dateileseoperation starten
eio_read(
    fopen('/etc/hostname', 'r'),
    16,
    0,
    EIO_PRI_DEFAULT,
    function ($data, $result) {
        echo 'Gelesen: ' . $result . PHP_EOL;
    }
);

// Einfache Event-Loop
while (eio_nreqs()) {
    eio_poll();
    // Hier könnten weitere Ereignisse verarbeitet werden
}
?>
Gelesen: myhost

Integration mit einem libevent-basierten Loop

<?php
// Maximale Poll-Zeit auf 100 ms setzen, damit der Event-Loop reaktionsfähig bleibt
eio_set_max_poll_time(0.1);

// Notification-Dateideskriptor (nur Konzept, erfordert libevent)
$fd = eio_get_event_stream();

echo 'Maximale Poll-Zeit gesetzt. fd=' . $fd . PHP_EOL;

// Hier würde man $fd in den libevent-Loop einbinden
// und bei Aktivität eio_poll() aufrufen
?>
Maximale Poll-Zeit gesetzt. fd=5

// Wichtig · Fallstricke

Wichtig: Die eio-Erweiterung ist nicht standardmäßig in PHP enthalten und muss separat installiert werden (z. B. via PECL: pecl install eio).

Ein Wert von 0 oder negativ lässt eio_poll() sofort zurückkehren, was in stark ausgelasteten Event-Loops sinnvoll sein kann, um Callbacks zu verarbeiten ohne zu blockieren. Allerdings kann dies zu erhöhter CPU-Auslastung führen, wenn die Schleife sehr häufig iteriert.

Die Funktion hat nur dann eine spürbare Wirkung, wenn eio_poll() tatsächlich blockieren würde – also wenn keine abgeschlossenen Anfragen vorliegen und der interne Timeout der Funktion greifen würde.