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