Start · Sprachen · PHP · Referenz · eio_set_max_parallel

eio_set_max_parallel

Funktion

Setzt die maximale Anzahl paralleler Threads, die die <code>eio</code>-Erweiterung für asynchrone I/O-Operationen verwenden darf.

seit PHP 0.0.1dev Kategorie: io

Signatur

eio_set_max_parallel(int $nthreads): void

Beschreibung

eio_set_max_parallel() legt fest, wie viele Worker-Threads die eio-Erweiterung gleichzeitig betreiben darf. Die eio-Bibliothek führt Datei-I/O-Operationen asynchron in einem Thread-Pool aus; diese Funktion steuert die obere Grenze der Pool-Größe.

Ein höherer Wert kann den Durchsatz bei I/O-intensiven Anwendungen steigern, erhöht jedoch auch den Speicher- und Kontextwechsel-Overhead. In Produktionsumgebungen sollte der Wert an die Anzahl verfügbarer CPU-Kerne und die erwartete I/O-Last angepasst werden.

Die Einstellung gilt global für den aktuellen PHP-Prozess und sollte idealerweise vor dem Start intensiver asynchroner Operationen gesetzt werden, z. B. zusammen mit eio_set_min_parallel() beim Initialisieren der Anwendung.

Parameter

Name Typ Default Beschreibung
$nthreads Pflicht int Die maximale Anzahl paralleler Worker-Threads. Ein Wert von 0 oder kleiner kann das Standardverhalten der Bibliothek wiederherstellen. Empfohlen wird ein Wert im Bereich von 1 bis zur Anzahl der CPU-Kerne multipliziert mit einem I/O-Lastfaktor.

Rückgabewert

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

Beispiele

Parallele Threads vor dem Start asynchroner Datei-Operationen begrenzen

<?php
// Maximal 4 parallele Threads erlauben
eio_set_max_parallel(4);

// Asynchrones Lesen einer Datei
$req = eio_read(
    '/var/log/syslog',
    0,
    4096,
    EIO_PRI_DEFAULT,
    function ($data, $result) {
        if ($result === -1) {
            echo 'Fehler beim Lesen' . PHP_EOL;
        } else {
            echo 'Gelesene Bytes: ' . strlen($result) . PHP_EOL;
        }
    }
);

eio_event_loop();
Gelesene Bytes: 4096

Kombination mit eio_set_min_parallel für feingranulare Thread-Kontrolle

<?php
// Mindestens 2, maximal 8 Threads
eio_set_min_parallel(2);
eio_set_max_parallel(8);

$files = ['/tmp/a.txt', '/tmp/b.txt', '/tmp/c.txt'];

foreach ($files as $file) {
    eio_stat(
        $file,
        EIO_PRI_DEFAULT,
        function ($data, $result) use ($file) {
            if (isset($result['size'])) {
                echo $file . ' ist ' . $result['size'] . ' Bytes groß.' . PHP_EOL;
            } else {
                echo $file . ' nicht gefunden.' . PHP_EOL;
            }
        }
    );
}

eio_event_loop();
/tmp/a.txt ist 128 Bytes groß. /tmp/b.txt ist 256 Bytes groß. /tmp/c.txt nicht gefunden.

// Wichtig · Fallstricke

Ressourcen-Overhead: Zu viele parallele Threads können den Speicherverbrauch und den Scheduler-Overhead erhöhen. Auf einem System mit 4 CPU-Kernen sind Werte zwischen 4 und 16 typisch, abhängig vom I/O-Wait-Anteil der Operationen.

Reihenfolge: Diese Funktion sollte aufgerufen werden, bevor eio-Operationen in die Warteschlange eingereiht werden, da Änderungen den bereits laufenden Thread-Pool ggf. nicht sofort beeinflussen.

Verfügbarkeit: Die eio-Erweiterung ist nicht standardmäßig in PHP enthalten und muss separat installiert werden (pecl install eio). Sie ist primär für UNIX-Systeme gedacht.