Signatur
Beschreibung
swoole_cpu_num() ist eine von der Swoole-Erweiterung bereitgestellte Hilfsfunktion, die die Anzahl der logischen CPU-Kerne des aktuellen Systems zurückgibt. Sie liest diese Information direkt aus dem Betriebssystem aus und ist damit zuverlässiger als das manuelle Parsen von /proc/cpuinfo oder ähnlichen Systemdateien.
Der typische Anwendungsfall ist die Konfiguration von Worker-Prozessen in Swoole-basierten Anwendungen. Eine verbreitete Empfehlung lautet, die Anzahl der Worker-Prozesse auf die Anzahl der CPU-Kerne (oder ein Vielfaches davon) zu setzen, um eine optimale Auslastung zu erreichen und unnötigen Overhead durch zu viele Kontextwechsel zu vermeiden.
Die Funktion ist ausschließlich verfügbar, wenn die Swoole-Erweiterung installiert und aktiv ist. Außerhalb einer Swoole-Umgebung steht sie nicht zur Verfügung. Unter Linux entspricht der Rückgabewert der Anzahl der durch nproc gemeldeten logischen Prozessoren (Hyper-Threading eingeschlossen).
Rückgabewert
1 zurückgegeben.Beispiele
Anzahl der CPU-Kerne ausgeben
<?php
// Voraussetzung: Swoole-Erweiterung ist installiert
$cpuCores = swoole_cpu_num();
echo "Verfügbare CPU-Kerne: " . $cpuCores . PHP_EOL;
Worker-Anzahl eines Swoole-HTTP-Servers dynamisch konfigurieren
<?php
// Voraussetzung: Swoole-Erweiterung ist installiert
$server = new Swoole\HTTP\Server('0.0.0.0', 9501);
// Worker-Prozesse auf CPU-Kernanzahl setzen
$workerNum = swoole_cpu_num();
$server->set([
'worker_num' => $workerNum,
'task_worker_num' => $workerNum * 2,
]);
$server->on('Request', function ($request, $response) {
$response->header('Content-Type', 'text/plain');
$response->end('Hallo von Worker ' . $response->fd);
});
echo "Server startet mit {$workerNum} Workern..." . PHP_EOL;
$server->start();
// Wichtig · Fallstricke
Abhängigkeit: swoole_cpu_num() ist ausschließlich in Umgebungen verfügbar, in denen die Swoole-PHP-Erweiterung (Version 1.x aufwärts) geladen ist. Ein Aufruf ohne installierte Erweiterung führt zu einem fatalen Fehler (Call to undefined function). Prüfe die Verfügbarkeit ggf. mit function_exists('swoole_cpu_num').
Hyper-Threading: Auf Systemen mit aktiviertem Hyper-Threading (Intel) oder SMT (AMD) werden auch logische Kerne gezählt, nicht nur physische. Für CPU-intensive Prozesse kann es sinnvoll sein, nur die physischen Kerne zu verwenden und die zurückgegebene Zahl entsprechend zu halbieren.
Containerumgebungen: In Docker-Containern oder unter Kubernetes kann der zurückgegebene Wert die Anzahl der Kerne des Host-Systems widerspiegeln, auch wenn dem Container weniger Ressourcen zugewiesen wurden. Nutze in solchen Fällen ggf. Cgroup-bewusste Alternativen.