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.
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.
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.
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 |
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.
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.
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.