Start · Sprachen · PHP · Referenz · eio_grp_limit

eio_grp_limit

Funktion

Setzt das maximale Limit für die Anzahl gleichzeitig aktiver Anfragen innerhalb einer <code>eio</code>-Gruppe.

Kategorie: io

Signatur

eio_grp_limit(resource $grp, int $limit): void

Beschreibung

eio_grp_limit begrenzt die Anzahl der Anfragen, die innerhalb einer Gruppe (erzeugt mit eio_grp) gleichzeitig aktiv ausgeführt werden dürfen. Sobald das Limit erreicht ist, werden weitere Anfragen in der Gruppe zurückgehalten, bis laufende abgeschlossen sind.

Diese Funktion ist nützlich, um den Ressourcenverbrauch bei intensiven asynchronen I/O-Operationen zu kontrollieren. Zum Beispiel kann man verhindern, dass zu viele Dateideskriptoren gleichzeitig geöffnet werden, wenn eine große Anzahl von Dateien parallel gelesen oder geschrieben werden soll.

Die Funktion wirkt ausschließlich auf die übergebene Gruppe und beeinflusst keine anderen Gruppen oder globale eio-Einstellungen. Typischerweise wird sie direkt nach dem Erstellen der Gruppe mit eio_grp aufgerufen, bevor Anfragen zur Gruppe hinzugefügt werden.

Parameter

Name Typ Default Beschreibung
$grp Pflicht resource Das Gruppen-Handle, das zuvor mit eio_grp erzeugt wurde.
$limit Pflicht int Die maximale Anzahl gleichzeitig aktiver Anfragen innerhalb der Gruppe. Ein Wert von 0 oder kleiner deaktiviert das Limit.

Rückgabewert

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

Beispiele

Gruppe mit Limit erstellen und Dateien asynchron lesen

<?php
// Callback, der aufgerufen wird, wenn die gesamte Gruppe abgeschlossen ist
function grp_done($data, $result) {
    echo "Alle Gruppenanfragen abgeschlossen.\n";
}

// Callback für einzelne Leseanfragen
function file_read_done($data, $result) {
    if ($result === -1) {
        echo "Fehler beim Lesen von: " . $data . "\n";
    } else {
        echo "Inhalt von " . $data . ": " . $result . "\n";
    }
}

// Gruppe erstellen
$grp = eio_grp('grp_done', null);

// Gleichzeitig maximal 3 Anfragen aktiv erlauben
eio_grp_limit($grp, 3);

$files = ['/tmp/file1.txt', '/tmp/file2.txt', '/tmp/file3.txt', '/tmp/file4.txt', '/tmp/file5.txt'];

foreach ($files as $file) {
    $req = eio_open(
        $file,
        EIO_O_RDONLY,
        null,
        EIO_PRI_DEFAULT,
        function($data, $result) {
            if ($result >= 0) {
                eio_read($result, 1024, 0, EIO_PRI_DEFAULT, 'file_read_done', $data);
                eio_close($result);
            }
        },
        $file
    );
    eio_grp_add($grp, $req);
}

eio_event_loop();
?>
Alle Gruppenanfragen abgeschlossen.

Limit dynamisch anpassen

<?php
function grp_callback($data, $result) {
    echo "Gruppe beendet.\n";
}

$grp = eio_grp('grp_callback', null);

// Zunächst auf 2 gleichzeitige Anfragen begrenzen
eio_grp_limit($grp, 2);

// Später das Limit erhöhen (z. B. basierend auf Systemlast)
$systemLastGering = true;
if ($systemLastGering) {
    eio_grp_limit($grp, 10);
    echo "Limit auf 10 erhöht.\n";
}

eio_event_loop();
?>
Limit auf 10 erhöht. Gruppe beendet.

// Wichtig · Fallstricke

Hinweis: Die eio-Erweiterung ist nicht standardmäßig in PHP enthalten und muss separat über PECL installiert werden. Sie steht nur auf Unix-ähnlichen Systemen zur Verfügung und ist nicht unter Windows verfügbar.

Ein zu niedrig gesetztes Limit kann die Gesamtperformance reduzieren, da viele Anfragen auf ihre Ausführung warten müssen. Ein zu hohes Limit kann hingegen zu Ressourcenengpässen (z. B. zu viele offene Dateideskriptoren) führen. Es empfiehlt sich, das Limit anhand der Systemkapazitäten und der Anzahl verfügbarer Dateideskriptoren zu wählen.