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