Start · Sprachen · PHP · Referenz · usleep

usleep

Funktion

Hält die Programmausführung für die angegebene Anzahl von Mikrosekunden an.

seit PHP 4.0.0 Kategorie: misc

Signatur

usleep(int $microseconds): void

Beschreibung

usleep() pausiert die Ausführung des aktuellen PHP-Skripts für die angegebene Dauer in Mikrosekunden (1 Sekunde = 1.000.000 Mikrosekunden). Die Funktion ist das Pendant zu sleep(), bietet aber eine feinere Zeitauflösung.

Typische Einsatzgebiete sind das Drosseln von API-Anfragen, um Rate-Limits einzuhalten, das kontrollierte Polling von Ressourcen oder das Verhindern von Busy-Waiting-Schleifen, die die CPU unnötig belasten würden. Auch bei der Erzeugung von zufälligen Verzögerungen in Tests oder Simulationen kommt die Funktion zum Einsatz.

Zu beachten ist, dass die tatsächliche Schlafzeit vom Betriebssystem und der Systemlast abhängt und etwas länger ausfallen kann als angegeben. Auf Windows-Systemen ist die minimale Auflösung auf etwa 1 Millisekunde (1.000 Mikrosekunden) begrenzt.

Parameter

Name Typ Default Beschreibung
$microseconds Pflicht int Die Anzahl der Mikrosekunden, um die die Ausführung verzögert werden soll. Werte über 1.000.000 (1 Sekunde) sind zulässig, können aber auf manchen Systemen zu unerwartetem Verhalten führen – in solchen Fällen empfiehlt sich sleep() für ganze Sekunden.

Rückgabewert

Typ
void
Beschreibung
Die Funktion gibt keinen Wert zurück.

Beispiele

Einfache Pause von 0,5 Sekunden

<?php
echo "Start: " . date('H:i:s') . PHP_EOL;
usleep(500000); // 500.000 Mikrosekunden = 0,5 Sekunden
echo "Ende:  " . date('H:i:s') . PHP_EOL;
Start: 12:00:00 Ende: 12:00:00

API-Rate-Limiting: Drosselung zwischen mehreren Anfragen

<?php
$urls = [
    'https://api.example.com/resource/1',
    'https://api.example.com/resource/2',
    'https://api.example.com/resource/3',
];

foreach ($urls as $url) {
    // Anfrage simulieren
    echo "Abrufen: {$url}" . PHP_EOL;

    // 200 Millisekunden warten, um Rate-Limit (max. 5 Req/s) einzuhalten
    usleep(200000);
}

echo "Alle Anfragen abgeschlossen." . PHP_EOL;
Abrufen: https://api.example.com/resource/1 Abrufen: https://api.example.com/resource/2 Abrufen: https://api.example.com/resource/3 Alle Anfragen abgeschlossen.

Polling mit kurzer Wartezeit zwischen den Versuchen

<?php
$maxVersuche = 5;
$versuch = 0;
$ressourceVerfuegbar = false;

while ($versuch < $maxVersuche && !$ressourceVerfuegbar) {
    $versuch++;
    echo "Versuch {$versuch}..." . PHP_EOL;

    // Prüfung der Ressource (hier simuliert)
    if ($versuch === 3) {
        $ressourceVerfuegbar = true;
    } else {
        usleep(100000); // 100 ms warten vor dem nächsten Versuch
    }
}

echo $ressourceVerfuegbar ? "Ressource verfügbar!" : "Ressource nicht erreichbar.";
Versuch 1... Versuch 2... Versuch 3... Ressource verfügbar!

// Wichtig · Fallstricke

Windows-Einschränkung: Auf Windows-Systemen ist die minimale Schlafzeit auf etwa 1 Millisekunde begrenzt. Kleinere Werte als 1000 Mikrosekunden werden auf Windows effektiv auf ~1 ms aufgerundet.

Maximale Dauer: Werte über 1.000.000 Mikrosekunden (= 1 Sekunde) können auf manchen Unix-Systemen dazu führen, dass gar nicht gewartet wird. Für Pausen von einer Sekunde oder mehr sollte sleep() oder time_nanosleep() bevorzugt werden.

Signal-Unterbrechung: Auf Unix-Systemen kann ein eintreffendes Signal (z. B. SIGALRM) die Pause vorzeitig beenden. Das Skript läuft dann unmittelbar weiter, ohne die volle Wartezeit abzuwarten.