time_nanosleep()
Découvrez la fonction PHP time_nanosleep() : syntaxe, paramètres, valeurs de retour et exemples pratiques.
Dans cet article, nous nous intéressons à la fonction PHP time_nanosleep(). Nous allons couvrir sa syntaxe, ses paramètres et ses valeurs de retour, montrer des exemples fonctionnels, expliquer comment gérer les interruptions et vous orienter vers les fonctions de temporisation connexes.
Introduction à la fonction time_nanosleep()
La fonction time_nanosleep() est une fonction PHP intégrée qui suspend l'exécution d'un script pendant un nombre donné de secondes et de nanosecondes. En acceptant une précision à la nanoseconde, c'est la méthode la plus fine pour introduire un délai en PHP — bien plus précise que sleep(), qui n'accepte que des secondes entières.
Une nanoseconde est un milliardième de seconde (1e-9 s), donc 1000000000 nanosecondes équivalent à une seconde complète. En pratique, la précision réelle est limitée par l'ordonnanceur du système d'exploitation, mais la fonction vous permet de demander des délais inférieurs à la microseconde.
time_nanosleep() est basé sur POSIX et n'est pas disponible sous Windows par défaut.
Syntaxe
time_nanosleep(int $seconds, int $nanoseconds): array|boolParamètres
$seconds— le nombre de secondes entières de pause. Doit être un entier non négatif.$nanoseconds— le nombre de nanosecondes supplémentaires de pause, dans la plage0à999999999. Des valeurs de1000000000ou plus provoquent un avertissement et l'appel échoue.
Valeurs de retour
- Retourne
trueen cas de succès. - Retourne
falseen cas d'erreur (par exemple, lorsqu'un argument est hors plage). - Si le sommeil est interrompu par un signal, la fonction retourne un tableau associatif avec deux clés,
secondsetnanoseconds, contenant la durée restante à dormir. C'est ce qui permet de reprendre le délai là où il a été interrompu.
Comment utiliser la fonction time_nanosleep()
Appelez la fonction en passant le nombre de secondes et de nanosecondes de pause. Voici un exemple de base :
Dans cet exemple, nous appelons time_nanosleep() avec 1 seconde et 500000000 nanosecondes. Cela suspend le script pendant 1 seconde plus 500 000 000 nanosecondes (0,5 seconde), soit 1,5 seconde au total. Nous affichons un message avant la pause, attendons la durée spécifiée, puis affichons un autre message une fois terminé.
Mesurer le délai réel
Étant donné que l'ordonnanceur du système d'exploitation décide exactement quand le processus reprend, la pause réelle est au moins la durée demandée, mais peut être légèrement plus longue. Vous pouvez le vérifier avec microtime() :
La valeur affichée sera d'environ 0.250 secondes (par exemple 0.250 ou 0.251), confirmant le délai d'un quart de seconde demandé.
Reprendre après une interruption de signal
Si un signal interrompt le sommeil, time_nanosleep() retourne le temps restant sous forme de tableau au lieu de true. Vous pouvez boucler jusqu'à ce que le délai complet se soit écoulé :
Sans gestionnaire de signal, le corps de la boucle ne s'exécute jamais, mais c'est le bon modèle pour les scripts qui enregistrent des gestionnaires de signaux avec l'extension pcntl.
Considérations sur les performances
time_nanosleep() est efficace car elle s'appuie sur l'ordonnanceur du système d'exploitation plutôt que sur une attente active, elle ne consomme donc pas de cycles CPU pendant la pause. Gardez ces points à l'esprit :
- Elle est POSIX uniquement et n'est pas disponible sous Windows par défaut. Sous Windows, utilisez
usleep()pour des délais en microsecondes. - Lorsqu'elle est appelée fréquemment, la surcharge liée aux changements de contexte peut s'accumuler ; utilisez-la uniquement lorsqu'une précision inférieure à la seconde est réellement nécessaire.
- La pause est un minimum, pas une garantie exacte — ne vous y fiez jamais pour une synchronisation en temps réel strict.
Fonctions connexes
sleep()— suspend l'exécution pendant un nombre entier de secondes.usleep()— suspend l'exécution pendant un nombre de microsecondes.time_sleep_until()— suspend l'exécution jusqu'à ce qu'un horodatage Unix donné soit atteint.microtime()— obtient l'heure actuelle avec une précision à la microseconde, utile pour mesurer les délais.
Conclusion
En conclusion, la fonction time_nanosleep() est un outil puissant pour créer des délais avec une synchronisation très précise. En comprenant comment utiliser la fonction et ses considérations de performances, vous pouvez tirer parti de cette fonctionnalité pour créer des délais de temporisation précis dans vos scripts PHP.