Start · Sprachen · PHP · Referenz · eio_set_min_parallel

eio_set_min_parallel

Funktion

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

Kategorie: io

Signatur

eio_set_min_parallel(int $nthreads): void

Beschreibung

Mit eio_set_min_parallel() kann die Mindestanzahl an Threads festgelegt werden, die der interne Thread-Pool der eio-Erweiterung vorhalten soll. Die eio-Erweiterung implementiert asynchrone POSIX-I/O-Operationen mithilfe eines Thread-Pools, der je nach Last skaliert. Diese Funktion steuert, wie viele Threads mindestens aktiv gehalten werden.

Ein höherer Mindestwert kann die Latenz bei plötzlich eintreffenden I/O-Aufgaben reduzieren, da bereits Threads bereitstehen und nicht erst neu gestartet werden müssen. Dies ist besonders nützlich in Anwendungen, die eine vorhersehbar hohe Anzahl paralleler Datei- oder Netzwerk-Operationen durchführen.

Zu beachten ist, dass ein zu großer Wert unnötig Systemressourcen (Speicher, Kontextwechsel) verbraucht, wenn die I/O-Last tatsächlich gering ist. Der Standardwert ist in der Regel ausreichend; eine Anpassung sollte nur nach entsprechenden Benchmarks erfolgen. eio_set_min_parallel() wirkt global auf den gesamten Thread-Pool der eio-Erweiterung.

Die Funktion arbeitet eng mit eio_set_max_parallel() zusammen, welche die maximale Anzahl paralleler Threads bestimmt. Der Mindestwert darf den Maximalwert nicht überschreiten, andernfalls kann es zu unerwartetem Verhalten kommen.

Parameter

Name Typ Default Beschreibung
$nthreads Pflicht int Die minimale Anzahl paralleler Threads im Thread-Pool. Muss eine positive ganze Zahl sein und sollte den mit eio_set_max_parallel() gesetzten Maximalwert nicht überschreiten.

Rückgabewert

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

Beispiele

Minimale Thread-Anzahl vor dem Start asynchroner I/O-Operationen setzen

<?php
// Mindestens 4 parallele Threads bereithalten
eio_set_min_parallel(4);

// Maximale Threads ebenfalls setzen (sollte >= min sein)
eio_set_max_parallel(16);

// Asynchrone Datei-Leseoperation starten
$tmp = tempnam(sys_get_temp_dir(), 'eio');
file_put_contents($tmp, 'Testinhalt');

eio_open($tmp, EIO_O_RDONLY, 0, EIO_PRI_DEFAULT, function($data, $result) use ($tmp) {
    if ($result >= 0) {
        eio_read($result, 100, 0, EIO_PRI_DEFAULT, function($data, $result) use ($tmp) {
            echo "Gelesen: " . $result . PHP_EOL;
            eio_unlink($tmp);
        });
    }
});

eio_event_loop();
?>
Gelesen: Testinhalt

Thread-Pool-Einstellungen kombiniert konfigurieren

<?php
// Thread-Pool für eine I/O-intensive Anwendung konfigurieren
eio_set_min_parallel(2);  // Mindestens 2 Threads immer aktiv
eio_set_max_parallel(8);  // Maximal 8 Threads gleichzeitig

echo "eio Thread-Pool konfiguriert: min=2, max=8" . PHP_EOL;

// Mehrere parallele Schreiboperationen starten
for ($i = 0; $i < 4; $i++) {
    $file = sys_get_temp_dir() . "/eio_test_{$i}.txt";
    eio_open($file, EIO_O_WRONLY | EIO_O_CREAT | EIO_O_TRUNC, 0644, EIO_PRI_DEFAULT,
        function($data, $fd) use ($i, $file) {
            if ($fd >= 0) {
                eio_write($fd, "Inhalt $i", 0, EIO_PRI_DEFAULT, function($data, $result) use ($fd, $file) {
                    eio_close($fd);
                    echo "Datei geschrieben und geschlossen." . PHP_EOL;
                    eio_unlink($file);
                });
            }
        }
    );
}

eio_event_loop();
?>
eio Thread-Pool konfiguriert: min=2, max=8 Datei geschrieben und geschlossen. Datei geschrieben und geschlossen. Datei geschrieben und geschlossen. Datei geschrieben und geschlossen.

// Wichtig · Fallstricke

Ressourcenverbrauch: Ein hoher Mindestwert hält dauerhaft viele Threads im Speicher, selbst wenn kaum I/O-Last vorhanden ist. Wähle den Wert daher sparsam und basierend auf realen Lastmessungen.

Reihenfolge: eio_set_min_parallel() sollte idealerweise vor dem ersten Aufruf einer asynchronen eio_*-Funktion aufgerufen werden, damit der Thread-Pool korrekt initialisiert wird.

Abhängigkeit: Die eio-Erweiterung ist nicht standardmäßig in PHP enthalten und muss über PECL installiert werden. Die Funktion ist nur verfügbar, wenn die Erweiterung geladen ist (extension=eio).