available_parallelism
(PHP 8.6+, True Async 1.0)
Async\available_parallelism() gibt die Anzahl der CPUs zurück, die dem aktuellen Prozess zur Verfügung stehen.
Beschreibung
namespace Async;
function available_parallelism(): intBerücksichtigt cgroup-CPU-Quotas, sched_setaffinity und ähnliche Einschränkungen. Genau diesen Wert empfiehlt libuv für die Größe von Thread-Pool / Worker-Pool. Stets >= 1.
In einem Container mit cpu.max=2 liefert die Funktion 2, nicht die physische Kernzahl des Hosts. Auf Bare-Metal — die Anzahl logischer Kerne abzüglich Affinity-Beschränkungen (sofern gesetzt).
Backend: uv_available_parallelism() mit Fallback auf uv_cpu_info.
Rückgabewert
int — Anzahl der CPUs, garantiert >= 1.
Beispiele
Beispiel #1 Pool-Größe an verfügbare CPUs anpassen
<?php
use Async\ThreadPool;
use function Async\available_parallelism;
// Idiomatisch: Autodetect ist bereits in ThreadPool über workers=0 eingebaut,
// aber der explizite Aufruf ist nötig, wenn man etwas anderes skalieren will.
$pool = new ThreadPool(workers: available_parallelism());Beispiel #2 Worker-Pool-Größe des HTTP-Servers
<?php
use TrueAsync\HttpServer;
use TrueAsync\HttpServerConfig;
use function Async\available_parallelism;
$server = new HttpServer(
(new HttpServerConfig())
->addListener('0.0.0.0', 8080)
->setWorkers(available_parallelism())
);
$server->start();Beispiel #3 Umgebungs-Diagnose
<?php
use function Async\available_parallelism;
echo "Process can use ", available_parallelism(), " CPU(s)\n";
// In Docker mit `--cpus=2` → 2
// Auf einem Host mit 16 Kernen ohne Einschränkungen → 16
// In einem Kubernetes-Pod mit requests/limits cpu=1 → 1Hinweise
Tipp: Für Worker-Pools von
ThreadPoolundHttpServer::setWorkers()muss diese Funktion nicht händisch aufgerufen werden — beide Komponenten nutzenavailable_parallelism()automatisch, wenn die Pool-Größe auf0gesetzt ist.
Bei den meisten IO-bound Workloads ist es sinnvoll, um
N + 1oderN + 2zu overcommitten — weil einige Worker in I/O blockieren.
Siehe auch
- Async\ThreadPool — wo der Wert automatisch verwendet wird
- Async\cpu_usage() — aktuelle Auslastung von Prozess und System
- Async\loadavg() — durchschnittliche Run-Queue-Länge