Start · Sprachen · PHP · Referenz · Pcntl\QosClass

Pcntl\QosClass

Enum

Definiert die Quality-of-Service-Klasse eines Prozesses für die Verwendung mit <code>pcntl_setpriority()</code> und verwandten Funktionen.

seit PHP 8.4.0 Kategorie: misc

Signatur

enum Pcntl\QosClass: int

Beschreibung

Pcntl\QosClass ist ein backed Enum (integer), das die Quality-of-Service-Klassen (QoS) eines Prozesses unter macOS/Darwin-Systemen abbildet. QoS-Klassen steuern, mit welcher Priorität und Ressourcenzuteilung das Betriebssystem einen Prozess oder Thread behandelt – von zeitkritischen Aufgaben bis hin zu Hintergrundarbeiten mit minimaler Systemlast.

Die Werte entsprechen den nativen Darwin-QoS-Klassen wie QOS_CLASS_USER_INTERACTIVE, QOS_CLASS_USER_INITIATED, QOS_CLASS_UTILITY, QOS_CLASS_BACKGROUND und QOS_CLASS_DEFAULT. Die Verwendung dieser Klassen ermöglicht eine feingranulare Steuerung, wie aggressiv das Betriebssystem CPU-Zeit, E/A-Bandbreite und Energie für einen Prozess bereitstellt.

Dieser Enum wird gemeinsam mit der Funktion pcntl_getpriority() und pcntl_setpriority() sowie den entsprechenden PCNTL-Erweiterungsfunktionen genutzt, die QoS-Klassen als Parameter akzeptieren. Er ist ausschließlich auf Plattformen verfügbar, die das Darwin-QoS-System unterstützen (macOS).

Durch den Einsatz passender QoS-Klassen lassen sich z. B. rechenintensive Hintergrundprozesse explizit als Background kennzeichnen, sodass interaktive Prozesse bevorzugt werden und die Systemreaktivität erhalten bleibt.

Beispiele

QoS-Klasse eines Kind-Prozesses auf Background setzen

<?php
// Nur auf macOS/Darwin verfügbar und wenn die pcntl-Erweiterung QoS unterstützt
if (!function_exists('pcntl_fork')) {
    echo "pcntl nicht verfügbar.";
    exit;
}

$pid = pcntl_fork();
if ($pid === 0) {
    // Kind-Prozess: als Hintergrundprozess markieren
    pcntl_setpriority(\Pcntl\QosClass::Background->value, 0, PRIO_PROCESS);
    echo "Kind-Prozess läuft mit QoS Background.\n";
    exit(0);
} elseif ($pid > 0) {
    pcntl_wait($status);
    echo "Kind-Prozess beendet.\n";
} else {
    echo "Fork fehlgeschlagen.\n";
}
Kind-Prozess läuft mit QoS Background. Kind-Prozess beendet.

Verfügbare QoS-Klassen ausgeben

<?php
// Alle Enum-Cases und ihre integer-Werte auflisten
foreach (\Pcntl\QosClass::cases() as $case) {
    echo $case->name . ' => ' . $case->value . "\n";
}
UserInteractive => 33 UserInitiated => 25 Default => 21 Utility => 17 Background => 9 Unspecified => 0

// Wichtig · Fallstricke

Plattformabhängigkeit: Pcntl\QosClass steht nur auf macOS/Darwin-Systemen zur Verfügung, die das native QoS-API bereitstellen. Auf Linux und anderen Unix-Systemen ist dieser Enum nicht definiert. Vor der Verwendung sollte daher enum_exists('Pcntl\\QosClass') geprüft werden.

Verfügbarkeit: Der Enum wurde mit PHP 8.4.0 eingeführt. Auf älteren PHP-Versionen führt der Zugriff zu einem fatalen Fehler.

Die genauen Integer-Werte der Enum-Cases entsprechen den systemseitig definierten Konstanten und können je nach macOS-Version geringfügig variieren.