W3docs

time_nanosleep()

Erfahren Sie, wie die PHP-Funktion time_nanosleep() funktioniert, wie man Unterbrechungen behandelt und welche verwandten Verzögerungsfunktionen es gibt.

In diesem Artikel befassen wir uns mit der PHP-Funktion time_nanosleep(). Wir erläutern ihre Syntax, Parameter und Rückgabewerte, zeigen funktionierende Beispiele, erklären den Umgang mit Unterbrechungen und verweisen auf verwandte Verzögerungsfunktionen.

Einführung in die Funktion time_nanosleep()

Die Funktion time_nanosleep() ist eine in PHP integrierte Funktion, die die Ausführung eines Skripts für eine bestimmte Anzahl von Sekunden und Nanosekunden anhält. Da sie Nanosekundengenauigkeit akzeptiert, ist sie die präziseste Möglichkeit, eine Verzögerung in PHP einzuführen — weit präziser als sleep(), das nur ganze Sekunden akzeptiert.

Eine Nanosekunde ist ein Milliardstel einer Sekunde (1e-9 s), sodass 1000000000 Nanosekunden einer ganzen Sekunde entsprechen. In der Praxis wird die tatsächliche Genauigkeit durch den Scheduler des Betriebssystems begrenzt, aber die Funktion erlaubt es, Verzögerungen im Submikrosekundenbereich anzufordern.

time_nanosleep() basiert auf POSIX und ist standardmäßig nicht unter Windows verfügbar.

Syntax

time_nanosleep(int $seconds, int $nanoseconds): array|bool

Parameter

  • $seconds — die Anzahl der ganzen Sekunden, um die angehalten werden soll. Muss eine nicht-negative ganze Zahl sein.
  • $nanoseconds — die Anzahl der zusätzlichen Nanosekunden, um die angehalten werden soll, im Bereich von 0 bis 999999999. Werte von 1000000000 oder mehr verursachen eine Warnung, und der Aufruf schlägt fehl.

Rückgabewerte

  • Gibt true bei Erfolg zurück.
  • Gibt false bei einem Fehler zurück (zum Beispiel wenn ein Argument außerhalb des gültigen Bereichs liegt).
  • Wenn der Schlaf durch ein Signal unterbrochen wird, gibt sie ein assoziatives Array mit zwei Schlüsseln zurück, seconds und nanoseconds, die die verbleibende Schlafzeit enthalten. Dies ermöglicht es, die Verzögerung dort fortzusetzen, wo sie unterbrochen wurde.

Verwendung der Funktion time_nanosleep()

Rufen Sie die Funktion auf und übergeben Sie die Anzahl der Sekunden und Nanosekunden, um die angehalten werden soll. Hier ist ein einfaches Beispiel:

php— editable, runs on the server

In diesem Beispiel rufen wir time_nanosleep() mit 1 Sekunde und 500000000 Nanosekunden auf. Dies pausiert das Skript für 1 Sekunde plus 500.000.000 Nanosekunden (0,5 Sekunden), also insgesamt 1,5 Sekunden. Wir geben eine Meldung vor der Pause aus, warten die angegebene Zeit und geben dann eine weitere Meldung aus, wenn der Vorgang abgeschlossen ist.

Messen der tatsächlichen Verzögerung

Da der OS-Scheduler entscheidet, wann der Prozess genau fortgesetzt wird, ist die tatsächliche Pause mindestens so lang wie die angeforderte Dauer, kann aber etwas länger sein. Sie können dies mit microtime() überprüfen:

php— editable, runs on the server

Der ausgegebene Wert beträgt ungefähr 0.250 Sekunden (zum Beispiel 0.250 oder 0.251), was die angeforderte Viertelsekunden-Verzögerung bestätigt.

Fortsetzen nach einer Signalunterbrechung

Wenn ein Signal den Schlaf unterbricht, gibt time_nanosleep() die verbleibende Zeit als Array statt true zurück. Sie können eine Schleife ausführen, bis die vollständige Verzögerung abgelaufen ist:

php— editable, runs on the server

Ohne einen Signal-Handler wird der Schleifenkörper nie ausgeführt, aber dies ist das korrekte Muster für Skripte, die Signal-Handler mit der pcntl-Erweiterung registrieren.

Überlegungen zur Performance

time_nanosleep() ist effizient, da es sich auf den OS-Scheduler stützt anstatt auf aktives Warten, sodass während der Pause keine CPU-Zyklen verbraucht werden. Beachten Sie dabei folgende Punkte:

  • Es ist nur POSIX-kompatibel und standardmäßig nicht unter Windows verfügbar. Unter Windows verwenden Sie usleep() für Mikrosekunden-Verzögerungen.
  • Bei häufigem Aufruf kann der Overhead durch Kontextwechsel zunehmen, daher sollte die Funktion nur verwendet werden, wenn tatsächlich Subsekundengenauigkeit erforderlich ist.
  • Die Pause ist ein Minimum, keine exakte Garantie — verlassen Sie sich niemals darauf für hartes Echtzeit-Timing.

Verwandte Funktionen

  • sleep() — hält die Ausführung für eine ganze Anzahl von Sekunden an.
  • usleep() — hält die Ausführung für eine Anzahl von Mikrosekunden an.
  • time_sleep_until() — hält die Ausführung an, bis ein bestimmter Unix-Zeitstempel erreicht ist.
  • microtime() — liefert die aktuelle Zeit mit Mikrosekundengenauigkeit, nützlich zum Messen von Verzögerungen.

Fazit

Zusammenfassend lässt sich sagen, dass die Funktion time_nanosleep() ein leistungsstarkes Werkzeug zur Erzeugung von Verzögerungen mit sehr präzisem Timing ist. Wenn Sie verstehen, wie die Funktion verwendet wird und welche Performance-Aspekte zu beachten sind, können Sie dieses Feature nutzen, um präzise Zeitverzögerungen in Ihren PHP-Skripten zu erstellen.

Übungen

Übung
Was macht die PHP-Funktion nanosleep()?
Was macht die PHP-Funktion nanosleep()?
Was this page helpful?