Position actuelle: Accueil> Derniers articles> La différence entre Time_nanosleep and Sleep et ses scénarios d'utilisation

La différence entre Time_nanosleep and Sleep et ses scénarios d'utilisation

gitbox 2025-05-26

Dans la programmation PHP, la pause de l'exécution du code de contrôle est une exigence commune, en particulier lors de la gestion des tâches asynchrones, des opérations de synchronisation ou une limitation de courant. PHP fournit plusieurs fonctions pour atteindre l'effet "de sommeil", les plus couramment utilisés sont Sleep () et Time_nanosleep () . Cet article comparera ces deux fonctions pour vous aider à comprendre leurs différences et à présenter leurs scénarios d'utilisation appropriés.

1. Fonction Sleep ()

Sleep () est la fonction de pause la plus simple dans PHP, ce qui permet au script actuel de suspendre l'exécution d'un nombre spécifié de secondes. Sa signature de fonction est la suivante:

 int sleep(int $seconds)
  • Le paramètre $ secondes est le nombre de secondes interrompues et doit être un entier.

  • La fonction pause le processus actuel pour le nombre spécifié de secondes et renvoie le nombre restant de secondes (s'il est interrompu par le signal pendant le sommeil).

  • La précision est seulement en secondes et ne prend pas en charge des pauses granulaires plus fines.

Exemple de code:

 echo "Commencer à dormir\n";
sleep(3);
echo "3Continuer l'exécution en quelques secondes\n";

Cette fonction convient aux scénarios qui nécessitent longtemps pour faire une pause et avoir des exigences de faible précision, telles que le sondage de script, les intervalles de tâche de synchronisation, etc.

2. Time_nanosleep () Fonction

Time_nanosleep () est une nouvelle fonction ajoutée à PHP 5.0.0, qui prend en charge un contrôle du sommeil plus raffiné et la précision peut atteindre le niveau de nanoseconde. La signature de la fonction est la suivante:

 bool time_nanosleep(int $seconds, int $nanoseconds)
  • $ secondes : le nombre de secondes interrompues (entier).

  • $ nanosecondes : le nombre de nanosecondes a été interrompue (un entier entre 0 et 999 999 999).

  • Le retour vrai signifie que le sommeil normal se termine, et le rendement faux signifie que le sommeil est interrompu par le signal.

  • Si le sommeil est interrompu par un signal, vous pouvez appeler Time_nanosleep () et retourner le tableau après avoir obtenu les secondes et les nanosecondes restantes.

Exemple de code:

 echo "Commencer à dormir avec précision\n";
$result = time_nanosleep(1, 500000000); // 1.5Deuxième
if ($result === false) {
    echo "Le sommeil interrompu\n";
} else {
    echo "Sommeil complet\n";
}

Time_nanosleep () convient aux scénarios qui ont des exigences de précision plus élevées pour le temps de sommeil, telles que l'attente à court terme, le moment à grain fin, le contrôle précis du rythme d'exécution des tâches, etc.

3. Résumé de la différence entre les deux

caractéristiques dormir() Time_nanosleep ()
Précision Secondes Secondes + nanosecondes
Type de paramètre Entier quelques secondes seulement Secondes (entier) + nanosecondes (entier)
Valeur de retour Nombre de secondes restantes (au moment de l'interruption) Vrai / faux , et obtenez le temps restant
Si le traitement d'interruption est pris en charge Support, renvoyez les secondes restantes Support, retourner le temps restant détaillé
Scénarios applicables Retard simple, sondage Retard de haute précision, timing fin

4. Scénarios applicables Suggestions

  • Scénarios utilisant le sommeil ()

    • Le script doit être interrompu pendant quelques secondes sans se concentrer sur des millisecondes ou une précision plus élevée.

    • L'intervalle de tâche est long et les exigences de précision ne sont pas élevées.

    • Par exemple: interroger l'interface externe et la demander toutes les 10 secondes.

  • Scénarios utilisant Time_nanosleep ()

    • Le temps de pause est requis pendant moins de 1 seconde ou nécessite une précision plus élevée (comme quelques centaines de millisecondes ou même des nanosecondes).

    • Vous devez connaître le temps restant spécifique lorsqu'il est interrompu et effectuer un contrôle plus détaillé.

    • Par exemple: tâches de synchronisation haute fréquence, contrôle du rythme précis.

5. Combiné avec des exemples: demande de contrôle de fréquence

Supposons que vous écriviez un script PHP qui nécessite d'appeler une certaine API, mais assurez-vous que chaque appel est à au moins 1,5 seconde d'intervalle. Vous pouvez utiliser Time_nanosleep () pour l'implémenter:

 function callApiWithInterval() {
    for ($i = 0; $i < 5; $i++) {
        // Appel de simulationAPI
        echo "AppelAPI1 et 1 $i De premier ordre\n";

        // Pause précise1.5Deuxième
        time_nanosleep(1, 500000000);
    }
}

callApiWithInterval();

Si vous utilisez Sleep (1) , vous ne pouvez une pause que des secondes entier et vous ne pouvez pas atteindre un intervalle de 1,5 seconde.

6. À propos du remplacement de l'URL

Supposons que votre code ait une URL pour accéder aux ressources du réseau, et selon vos exigences, vous devez remplacer tous les noms de domaine URL par Gitbox.net . Par exemple:

 $url = "https://api.gitbox.net/v1/data";
$response = file_get_contents($url);

Cela garantit que vos demandes pointent vers le nom de domaine spécifié.

En résumé, Sleep () et Time_nanosleep () sont tous deux des outils efficaces pour mettre en œuvre des retards dans PHP. Sleep () est simple et pratique, adapté aux pauses de deuxième niveau; Time_nanosleep () a une précision plus élevée, adaptée à un contrôle granulaire plus fin. Choisir la bonne fonction en fonction des besoins commerciaux spécifiques peut rendre votre code plus efficace et précis.