usleep()
In questo articolo analizziamo la funzione PHP usleep(): panoramica, funzionamento ed esempi pratici d'uso.
In questo articolo ci concentreremo sulla funzione PHP usleep(). Forniremo una panoramica della funzione, del suo funzionamento e alcuni esempi pratici d'uso.
Introduzione alla funzione usleep()
La funzione usleep() è una funzione integrata di PHP utilizzata per mettere in pausa l'esecuzione di uno script per un numero specificato di microsecondi. Permetteva ritardi con una temporizzazione molto precisa.
Nota:
usleep()è stata deprecata in PHP 8.1 e rimossa in PHP 8.2. Per le versioni moderne di PHP, usatime_nanosleep()otime_sleep_until()in alternativa.
La funzione usleep() accetta un singolo argomento: il numero di microsecondi per cui mettere in pausa l'esecuzione dello script. Un microsecondo è un milionesimo di secondo, quindi 1000000 microsecondi equivalgono a un secondo. Questa granularità più fine è ciò che distingue usleep() da sleep(), che accetta solo secondi interi.
Sintassi
usleep(int $microseconds): void| Argomento | Tipo | Descrizione |
|---|---|---|
$microseconds | int | Il numero di microsecondi per cui bloccare lo script. 1 secondo = 1000000 microsecondi. |
Come usare la funzione usleep()
Usare la funzione usleep() è molto semplice. Basta chiamare la funzione e passare il numero di microsecondi per cui mettere in pausa l'esecuzione dello script. Ecco un esempio:
Come usare la funzione usleep()?
In questo esempio, chiamiamo la funzione usleep() con un argomento di 500000 microsecondi per mettere in pausa l'esecuzione dello script. Questo sospende l'esecuzione dello script per 500 millisecondi (0,5 secondi). Viene quindi mostrato un messaggio in console che indica che il programma è in pausa, si attende il tempo specificato e poi viene mostrato un altro messaggio che indica che la pausa è terminata.
Misurare il ritardo
Poiché i microsecondi sono facili da contare male, è utile misurare il tempo trascorso reale con microtime(). L'esempio seguente mette in pausa per un quarto di secondo e stampa la durata effettiva:
<?php
$start = microtime(true);
usleep(250000); // 250000 microseconds = 0.25 seconds
$elapsed = microtime(true) - $start;
echo "Slept for " . round($elapsed, 3) . " seconds\n";
?>L'output è approssimativamente Slept for 0.25 seconds — potrebbe essere leggermente più lungo perché è il sistema operativo a decidere quando riattivare il processo.
Quando usare usleep()
usleep() è utile ogni volta che la pausa di un secondo intero di sleep() è troppo grossolana:
- Rate limiting — aggiungere un piccolo intervallo tra chiamate API ripetute o iterazioni di loop per rimanere entro una quota di richieste.
- Polling — attendere una frazione di secondo prima di verificare nuovamente un file, un lock o una coda.
- Throttling dell'output — rallentare un'animazione da riga di comando o la visualizzazione di un avanzamento per renderla leggibile.
Per pause misurate in nanosecondi, o quando occorre che la chiamata riprenda in modo affidabile dopo un segnale, si preferisce time_nanosleep(). Per mettere in pausa fino a un momento specifico dell'orologio di sistema, si usa time_sleep_until().
Considerazioni sulle prestazioni
La funzione usleep() è leggera e utilizza le chiamate di sleep del sistema operativo, quindi ha un overhead CPU trascurabile. Tuttavia, la durata effettiva della pausa dipende dallo scheduler del sistema operativo, il che significa che la precisione al di sotto del millisecondo non è garantita. Per una maggiore precisione o per seguire le pratiche PHP moderne, si consiglia time_nanosleep() o time_sleep_until().
Conclusione
In conclusione, la funzione usleep() è un modo semplice per mettere in pausa l'esecuzione degli script negli ambienti PHP legacy. Comprendendo i requisiti sulle unità di misura, il comportamento della temporizzazione dipendente dal sistema operativo e lo stato di deprecazione, è possibile usarla efficacemente per ritardi semplici o migrare verso alternative moderne come time_nanosleep() o time_sleep_until().