Navigation
 Startseite
 Fachbücher
 Forum
 Webmaster News
 Script Newsletter
 Kontakt
 Script Installation
 Php
 Php Tutorials
 Impressum

Community-Bereich
 kostenlos Registrieren
 Anmelden
 Benutzerliste

Script Datenbank
 Script Archiv
 Script Top 20
 Screenshots
 Testberichte

Suche
 

Unsere Php Scripts
 Counter Script
 Umfrage Script
 Bilder Upload Script
 Terminverwaltung
 Simple PHP Forum
 RSS Grabber

Script Mods
 phpBB Adsense Mode

Tools und Generatoren
 .htpasswd Generator
 md5 Generator
 base64 Generator
 Markdown to HTML
 Colorpicker
 Unix timestamp Tool
 TLD Liste
 Webkatalog‑Verzeichnis

Partner
 Sprüche Treff

Hosterplus.de
Bekommen Sie Speicherplatz (Webspace), Domains...
https://www.Hosterplus.de
Artfiles.de
Bietet Serviceorientierte...
https://www.Artfiles.de
 
 
 

PHP usleep(): Präzise Zeitverzögerungen in Mikrosekunden meistern

Sie befinden sich: Home > Php Tutorial > PHP Script verzögern in...

PHP Script verzögern in Mikrosekunden


Eintrag am:  18.08.2010
Hits / Besucher:  5490
Sprache:  Deutsch
Kategorie:  Einsteiger Tutorials
Tutorial Art:  eigenes
Eingetragen von   schubertmedia schubertmedia
 
Beschreibung

Wie kann man in PHP wirklich präzise, kurze Pausen realisieren? Wer mit Mikrosekunden arbeiten muss – etwa beim Throttling von Anfragen, in Hardware-nahen Scripten oder bei der Simulation von Wartezeiten - stößt schnell auf die Funktion usleep(). Sie erlaubt es, die Skriptausführung punktgenau um winzige Zeitspannen zu verzögern. Klingt einfach - doch in der Praxis gibt es zahlreiche Details, die Sie kennen sollten, um Fehler und Performanceprobleme zu vermeiden.

Modernes Titelbild mit digitaler Uhr, Mikrosekunden-Anzeige, Binärcode und PHP-Logo für einen Blogartikel zu PHP usleep().

 

Was ist usleep() und wofür wird es verwendet?

Die Funktion usleep() verzögert ein PHP-Skript um eine genaue Anzahl von Mikrosekunden. Eine Mikrosekunde ist der millionste Teil einer Sekunde. Im Gegensatz zu sleep() nutzt du usleep() für sehr kurze und präzise Pausen. Während sleep() nur volle Sekunden akzeptiert, steuerst du mit usleep() auch winzige Zeitspannen gezielt.

Typische Einsatzbereiche:

  • Rate Limiting: Sie wollen eine API nicht zu häufig ansprechen? Mit usleep() setzen Sie millisekundengenaue Wartezeiten zwischen Requests.

  • Kurze Pausen in Schleifen: Sie arbeiten eine Liste von Aufgaben ab und möchten zwischen den Schritten minimal pausieren, um die Serverlast oder das Verhalten zu steuern.

  • Simulationen und Tests: Sie simulieren verzögerte Prozesse oder testen UI-Reaktionen auf künstliche Latenzen.

Warum Mikrosekunden statt Sekunden?
Für viele Aufgaben reichen Sekunden-Pausen nicht aus. Mikrosekunden sind sinnvoll, wenn Sie etwa 10, 100 oder 250 Millisekunden (0,01 bis 0,25 Sekunden) pausieren möchten.

PHP usleep() – Syntax und Parameter

Die richtige Anwendung von usleep() beginnt mit einem Verständnis der Syntax und der erwarteten Werte.

Syntax:

void usleep(int $microseconds)

  • $microseconds: Ein Integer-Wert, der die Anzahl der Mikrosekunden angibt, die das Script „schlafen“ soll. 1.000.000 Mikrosekunden entsprechen genau einer Sekunde.

Wichtige Hinweise zur Verwendung:

  • Werte über 1.000.000 (also länger als eine Sekunde) sind zwar erlaubt, aber betriebssystemabhängig: Manche Systeme, vor allem ältere Windows-Versionen, ignorieren große Werte oder begrenzen sie intern. Für längere Pausen empfiehlt sich daher die Funktion sleep().

  • Negative Werte: Wenn Sie eine negative Zahl übergeben, erzeugt PHP eine Fehlermeldung.

  • Rückgabewert: usleep() gibt keinen Wert zurück (Rückgabewert ist void). Im Unterschied dazu liefert sleep() bei Signal-Unterbrechungen oder Fehlern eine Zahl zurück (Restzeit).

Einfache usleep() Beispiele

Ein praktisches Beispiel verdeutlicht am schnellsten, wie usleep() funktioniert.

Beispiel 1: Grundlegende Verzögerung

$start = microtime(true);

usleep(500000);
/* 500.000 Mikrosekunden = 0,5 Sekunden */
$end = microtime(true);
echo 'Verstrichene Zeit: ' . round($end - $start, 3) . ' Sekunden';

Erklärung:
Sie messen die Zeit vor und nach dem Aufruf von usleep(). Bei einer Verzögerung von 500.000 Mikrosekunden erwarten Sie ungefähr 0,5 Sekunden Differenz – systemabhängige Schwankungen können auftreten.

Beispiel 2: usleep() in einer Schleife

for ($i = 1; $i <= 5; $i++) {

echo "Schritt $in";
usleep(200000);
/* 0,2 Sekunden Pause pro Durchlauf */
}

Typischer Anwendungsfall:
Diese Technik findet sich oft bei Polling-Schleifen, wenn Ressourcen regelmäßig überprüft oder Aufgaben sequenziell abgearbeitet werden und Sie die CPU-Last gering halten möchten.

Fortgeschrittene Anwendung und wichtige Überlegungen

Wer Wert auf präzise Zeitsteuerung legt, sollte die Unterschiede der PHP-Funktionen genau kennen.

usleep() vs. sleep() vs. time_nanosleep(): Der detaillierte Vergleich

Funktion Einheit Genauigkeit Rückgabewert Eignung für
sleep() Sekunden niedrig Restzeit/false Lange Pausen
usleep() Mikrosekunden mittel–hoch void Kurze Pausen
time_nanosleep() Sekunden + Nanosek. sehr hoch bool/Restzeit Sehr präzise Pausen

Hinweis:
usleep() eignet sich für Pausen < 1 Sekunde.
sleep() wird für ganze Sekunden verwendet.
time_nanosleep() ist am präzisesten, benötigt aber mehr Code und wird selten wirklich gebraucht.

CPU-Last:
Ältere PHP-Versionen oder bestimmte Betriebssysteme führen usleep() manchmal als „aktiven Wait“ aus – das bedeutet, der Prozess bleibt aktiv und belastet die CPU, statt sich wirklich schlafen zu legen. Moderne Umgebungen sind meist effizienter, aber in performancekritischen Fällen sollten Sie das Verhalten testen.

Genauigkeit und Systemabhängigkeiten

Die tatsächlich pausierte Zeit kann von der gewünschten Dauer abweichen – je nach System, Auslastung und Timer-Granularität. Sehr kleine Werte (< 1000 Mikrosekunden) führen unter Umständen zu gar keiner spürbaren Verzögerung, da viele Betriebssysteme Timer-Events in Intervallen abarbeiten.

  • Windows-Unterstützung: Seit PHP 5.0.0 auf Windows verfügbar, davor nicht.
  • Negative Werte: Führen zu einem Warning.

Praxis-Tipp:
Testen Sie die tatsächliche Dauer Ihrer Pausen immer mit microtime(true) vor und nach dem Aufruf.

Maximale Ausführungszeit (max_execution_time)

Wenn Ihr Script durch usleep() verzögert wird, zählt diese Pause zur maximalen Ausführungszeit (max_execution_time). Wird diese überschritten, bricht PHP das Script ab, auch wenn es nur „geschlafen“ hat.

  • set_time_limit(): Sie können mit dieser Funktion die maximale Scriptlaufzeit anpassen. Aber: Während usleep() pausiert, kann PHP keine Kontrollmaßnahmen ausführen. Ein zu knapp gesetztes Limit führt zu einem Timeout.

usleep() und Output Buffering

Ein häufiger Fehler: Sie erwarten, dass Ausgaben nach echo und usleep() sofort erscheinen – in Wahrheit puffert PHP viele Ausgaben bis zum Ende des Scripts.

Lösung:
Verwenden Sie flush() und (sofern Output Buffering aktiv ist) ob_flush():

echo "Start...<br>";

ob_flush();
flush();
usleep(500000);
/* 0,5 Sekunden */
echo "Fertig.<br>";
ob_flush();
flush();

Wirkung:
Die Ausgaben erscheinen direkt im Browser, nicht erst nach Scriptende, was bei vielen Websites von Vorteil ist.

Signal Handling (für Experten)

Wie sleep(), kann usleep() theoretisch durch Signale unterbrochen werden – relevant für CLI-Scripte mit Signalbehandlung (etwa für Stop/Continue). usleep() gibt aber keine Information zurück, ob eine Unterbrechung erfolgte.

Praktische Anwendungsfälle für usleep()

  1. Rate Limiting für API-Anfragen
    Vermeiden Sie, dass Ihr Script zu viele Anfragen pro Sekunde sendet – zum Beispiel beim Scraping oder bei der Nutzung von externen APIs.

  2. Polling-Mechanismen
    Sie überwachen einen Wert in der Datenbank oder auf der Festplatte und legen mit usleep() kleine Pausen zwischen die Checks.

  3. Simulation von langsamen Operationen im Skript
    Beim Testen von UIs kann es helfen, künstliche Verzögerungen einzubauen, um z. B. Ladeindikatoren zu simulieren.

  4. Hardware-nahe Programmierung
    Wer mit Raspberry Pi und PHP-GPIO arbeitet, erzeugt mit usleep() sehr kurze Steuersignale.

  5. Reduzierung von CPU-Last
    In intensiven Schleifen sorgt ein kurzes usleep() dafür, dass das System Zeit für andere Aufgaben bekommt.

Häufige Fehler und Fallstricke (Troubleshooting)

  • Mikrosekunden und Millisekunden verwechseln
    Wer 1000 Mikrosekunden eingibt, erhält nur 0,001 Sekunden Pause – nicht eine ganze Sekunde.

  • usleep() für zu lange Pausen verwenden
    Ab ca. 1 Sekunde (1.000.000 Mikrosekunden) besser auf sleep() umsteigen.

  • Absolut exakte Pausen erwarten
    Rechnen Sie mit leichten Schwankungen, insbesondere auf ausgelasteten Systemen, während Sie die Zeit in Sekunden messen.

  • Hohe CPU-Last
    Bei auffällig hoher CPU-Last während Pausen: Testen Sie Alternativen und vergleichen Sie das Verhalten.

  • Ausgaben erscheinen nicht sofort
    Nutzen Sie flush(), wenn die Ausgabe direkt im Browser sichtbar sein soll.

Fazit und Best Practices

usleep() ist die richtige Wahl, wenn Sie im Millisekundenbereich exakte Pausen brauchen - etwa für APIs, Hardware-Steuerung oder Performance-Optimierung in Schleifen.


Achten Sie darauf, dass usleep() betriebssystemabhängig minimal anders funktionieren kann. Für längere Pausen (> 1 Sekunde) ist sleep() besser geeignet.


Vermeiden Sie Fehler durch falsche Einheiten und testen Sie im Zweifel immer das Verhalten auf Ihrem Zielsystem. Vergessen Sie nicht, flush() zu nutzen, falls Sie sofortige Ausgaben erwarten. In Summe bleibt: Wer Präzision und kurze Pausen braucht, greift zu usleep(), sollte sich aber der kleinen Hürden bewusst sein – und, wie so oft in PHP, die Umgebung im Blick behalten.

FAQ zu PHP usleep()

Kann ich usleep(0) verwenden?
Ja, technisch möglich – es bewirkt aber praktisch nichts, außer dass ggf. der Scheduler andere Prozesse bevorzugt behandelt.

Läuft usleep() überall?
Ja, seit PHP 5.0.0 auch unter Windows, frühere Versionen hatten diese Funktion dort nicht.

Wie messe ich die echte Pause?
Mit microtime(true) vor und nach dem Aufruf.

Verwandte Funktionen

  • sleep() – Ganze Sekunden pausieren, indem Sie die Funktion php sleep verwenden.
  • time_nanosleep() – Sekunde + Nanosekunden
  • time_sleep_until() – Bis zu einem Zeitstempel pausieren
  • set_time_limit() – Maximale Skriptlaufzeit festlegen

 

Tags:

 

Bücherregal mit drei Büchern: 'PHP 4 - Grundlagen und Profiwissen' von Hanser Verlag, 'Webdesign in a Nutshell' von O'Reilly Verlag, und 'Webgestaltung' von Galileo Computing.