Aktueller Standort: Startseite> Neueste Artikel> Verwenden Sie Time_Nanosleep, um eine genaue Schlafzeitregelung zu erreichen

Verwenden Sie Time_Nanosleep, um eine genaue Schlafzeitregelung zu erreichen

gitbox 2025-05-28

In PHP müssen wir das Programm häufig für einen bestimmten Zeitraum innehalten, was bei Umfragen, Timing -Aufgaben oder Tempo -Grenzvorgängen sehr häufig ist. Normalerweise verwenden Menschen die Sleep () -Funktion, um dies zu erreichen, aber die Zeiteinheit von Schlaf () beträgt Sekunden, die die genauen Kontrollanforderungen für Millisekunden oder sogar Nanosekunden nicht erfüllen können. Zu diesem Zeitpunkt bietet PHP die Funktion Time_nanosleep () , mit der Sie die Pausezeit mit der Genauigkeit von Sekunden und Nanosekunden steuern können.

Was ist time_nanoseep () ?

time_nanoSeep () ist eine Funktion, die in PHP 5.0.0 und oben bereitgestellt wird, damit der aktuelle Prozess die angegebene Anzahl von Sekunden und Nanosekunden annimmt. Im Vergleich zu Sleep () kann es nur zu Sekunden genau sein. Time_nanosleep () ermöglicht es Ihnen, die Pausezeit flexibler zu steuern.

Die Funktionsdefinition lautet wie folgt:

 bool time_nanosleep(int $seconds, int $nanoseconds)
  • $ Sekunden : Die Anzahl der Sekunden hielt eine Ganzzahl.

  • $ nanosekunden : Die Anzahl der Nanosekunden machte eine Pause, Ganzzahl, reicht von 0 bis 999.999.999.

Wenn die Pause erfolgreich ist, kehrt die Funktion wahr , und wenn sie in der Mitte durch ein Signal unterbrochen wird, gibt sie ein Array zurück, das die verbleibende Zeit enthält.

Beispiel für die Nutzung

Hier ist ein einfaches Beispiel dafür, wie Sie 1 Sekunde und 500 Millisekunden (d. H. 1,5 Sekunden) innehalten können:

 <?php
echo "Startzeit:" . microtime(true) . PHP_EOL;

$seconds = 1;
$nanoseconds = 500000000; // 500 Millisekunde = 500,000,000 Nanosekunden

if (time_nanosleep($seconds, $nanoseconds)) {
    echo "Schlafendzeit:" . microtime(true) . PHP_EOL;
} else {
    echo "Schlaf unterbrochen" . PHP_EOL;
}
?>

Das Run -Ergebnis zeigt den Zeitstempel zweimal mit einem Zeitunterschied von etwa 1,5 Sekunden.

Umgang mit Interrupts

Wenn time_nanoseep () durch das Systemsignal unterbrochen wird, wird ein Array zurückgegeben, das die verbleibenden Sekunden und Nanosekunden enthält. Sie können Time_nanoseep () erneut nach dem Rückgabewert anrufen, um weiter zu schlafen. Beispiele sind wie folgt:

 <?php
$seconds = 2;
$nanoseconds = 0;

while (true) {
    $result = time_nanosleep($seconds, $nanoseconds);
    if ($result === true) {
        echo "Schlaf vollständig" . PHP_EOL;
        break;
    } elseif (is_array($result)) {
        echo "Schlaf unterbrochen,übrige Zeit:{$result['seconds']}Zweite {$result['nanoseconds']}Nanosekunden" . PHP_EOL;
        $seconds = $result['seconds'];
        $nanoseconds = $result['nanoseconds'];
    } else {
        echo "Schläft nicht" . PHP_EOL;
        break;
    }
}
?>

Dieses Schreiben stellt sicher, dass das Programm nach einem Signal weiterhin die vorgegebene Schlafzeit abschließen kann.

Beispiele für Nutzungsszenarien in Kombination mit HTTP -Anfragen

Angenommen, Sie möchten eine Funktionsgeschwindigkeitsbegrenzungsfunktion implementieren, die zwischen jeder Anfrage für 200 Millisekunden pausieren. Sie können eine Anforderung in Verbindung mit CURL senden und time_nanosleep () verwenden, um die Intervallzeit genau zu steuern. Hier ist der Beispielcode:

 <?php
$urls = [
    "https://gitbox.net/api/data1",
    "https://gitbox.net/api/data2",
    "https://gitbox.net/api/data3",
];

foreach ($urls as $url) {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

    $response = curl_exec($ch);
    if (curl_errno($ch)) {
        echo "Anfrage fehlgeschlagen:" . curl_error($ch) . PHP_EOL;
    } else {
        echo "Anfrage erfolgte erfolgreich:" . substr($response, 0, 50) . "..." . PHP_EOL;
    }
    curl_close($ch);

    // Pause 200 Millisekunde
    time_nanosleep(0, 200000000);
}
?>

Dieser Code fordert wiederum drei Schnittstellen an, die nach jeder Anfrage für 200 Millisekunden pausieren und so zu häufige Anforderungen vermieden werden.

Zusammenfassen

  • Mit Time_NanOSleep () können Sie PHP -Programme mit Sekunden und Präzision in Nanosekunden innehalten.

  • Es ist flexibler als der herkömmliche Schlaf () und us im Sleep () und für Szenarien mit hohen Anforderungen an die Genauigkeit der Zeitkontrolle geeignet.

  • Achten Sie auf den Umgang mit Signal -Interrupts, um die Robustheit der Programmlogik zu gewährleisten.

  • time_nanoseep () ist eine sehr praktische Funktion, wenn Geschwindigkeitsbegrenzung, Intervallsteuerung oder feine Planung erforderlich ist.

Durch die rationalere Verwendung von Time_nanoseep () können Ihre PHP -Anwendungen in der Zeitregelung genauer und effizienter sein.