Start · Sprachen · PHP · Referenz · swoole_cpu_num

swoole_cpu_num

Funktion

Ermittelt die Anzahl der verfügbaren CPU-Kerne des Systems und gibt diese als Ganzzahl zurück.

Kategorie: misc

Signatur

swoole_cpu_num(): int

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

Typ
int
Beschreibung
Gibt die Anzahl der logischen CPU-Kerne des Systems als positive Ganzzahl zurück. Bei einem Ein-Kern-System wird 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;
Verfügbare CPU-Kerne: 8

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();
Server startet mit 8 Workern...

// 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.