Start · Sprachen · PHP · Referenz · pcntl_getqos_class

pcntl_getqos_class

Funktion

Gibt die QoS-Klasse (Quality of Service) des aktuellen Threads zurück.

seit PHP 8.4.0 Kategorie: misc

Signatur

pcntl_getqos_class(): int

Beschreibung

pcntl_getqos_class() liefert die aktuell zugewiesene QoS-Klasse (Quality of Service) des ausführenden Threads als Integer-Wert zurück. QoS-Klassen sind ein Konzept aus macOS/Darwin, das es ermöglicht, die Priorität und den Energieverbrauch von Threads zu steuern.

Die zurückgegebenen Werte entsprechen den vordefinierten QoS-Klassen-Konstanten, z. B. PCNTL_QOS_CLASS_USER_INTERACTIVE, PCNTL_QOS_CLASS_USER_INITIATED, PCNTL_QOS_CLASS_DEFAULT, PCNTL_QOS_CLASS_UTILITY und PCNTL_QOS_CLASS_BACKGROUND. Diese Klassen ordnen dem Thread eine Systempriorität zu, die beeinflusst, wie stark das Betriebssystem diesem Thread Rechenzeit und Energie zuweist.

Diese Funktion ist primär auf macOS-Systemen verfügbar und sinnvoll, wenn man ressourcenintensive Hintergrundprozesse (z. B. via pcntl_fork()) mit einer niedrigen Priorität versehen möchte, um den Energieverbrauch zu senken oder interaktive Prozesse nicht zu beeinträchtigen.

Beachte, dass diese Funktion nur auf Plattformen verfügbar ist, die QoS-Klassen unterstützen (in der Regel Darwin/macOS). Auf nicht unterstützten Plattformen steht sie nicht zur Verfügung.

Rückgabewert

Typ
int
Beschreibung
Gibt einen Integer zurück, der die aktuelle QoS-Klasse des Threads repräsentiert. Der Wert entspricht einer der PCNTL_QOS_CLASS_*-Konstanten.

Beispiele

Aktuelle QoS-Klasse abfragen und ausgeben

<?php
// QoS-Klasse des aktuellen Threads abfragen
$qosClass = pcntl_getqos_class();

switch ($qosClass) {
    case PCNTL_QOS_CLASS_USER_INTERACTIVE:
        echo "QoS-Klasse: User Interactive (höchste Priorität)\n";
        break;
    case PCNTL_QOS_CLASS_USER_INITIATED:
        echo "QoS-Klasse: User Initiated\n";
        break;
    case PCNTL_QOS_CLASS_DEFAULT:
        echo "QoS-Klasse: Default\n";
        break;
    case PCNTL_QOS_CLASS_UTILITY:
        echo "QoS-Klasse: Utility\n";
        break;
    case PCNTL_QOS_CLASS_BACKGROUND:
        echo "QoS-Klasse: Background (niedrigste Priorität)\n";
        break;
    default:
        echo "Unbekannte QoS-Klasse: " . $qosClass . "\n";
}
QoS-Klasse: Default

QoS-Klasse im Fork-Prozess prüfen

<?php
$pid = pcntl_fork();

if ($pid === -1) {
    die("Fork fehlgeschlagen\n");
} elseif ($pid === 0) {
    // Kind-Prozess: QoS-Klasse abfragen
    $qos = pcntl_getqos_class();
    echo "Kind-Prozess QoS-Klasse: " . $qos . "\n";
    exit(0);
} else {
    // Eltern-Prozess
    $qos = pcntl_getqos_class();
    echo "Eltern-Prozess QoS-Klasse: " . $qos . "\n";
    pcntl_waitpid($pid, $status);
}
Eltern-Prozess QoS-Klasse: 0 Kind-Prozess QoS-Klasse: 0

// Wichtig · Fallstricke

Plattformabhängigkeit: Diese Funktion ist ausschließlich auf macOS/Darwin-Systemen verfügbar, da QoS-Klassen ein Apple-spezifisches Konzept sind. Auf Linux oder Windows steht die Funktion nicht zur Verfügung. Überprüfe mit function_exists('pcntl_getqos_class'), ob die Funktion verfügbar ist, bevor du sie einsetzt.

Die Integer-Werte der QoS-Klassen-Konstanten entsprechen den in Apple's libdispatch definierten Klassen und können sich je nach macOS-Version unterscheiden. Verwende daher stets die Konstanten (PCNTL_QOS_CLASS_*) anstelle von hartkodierten Zahlenwerten.