Time_nanosleep est une fonction intégrée en PHP qui permet au processus actuel de dormir avec le nombre spécifié de secondes et de nanosecondes. Sa signature de fonction est la suivante:
bool time_nanosleep(int $seconds, int $nanoseconds)
$ secondes : entier secondes, deuxième partie du temps de sommeil.
$ nanosecondes : nanosecondes, allant de 0 à 999 999 999.
Par rapport à la fonction de sommeil traditionnelle, il ne peut mettre en œuvre un retard de deuxième niveau, Time_nanosleep prend en charge le retard au niveau de la nanoseconde, atteignant un contrôle temporel plus précis.
Supposons que vous souhaitiez faire une pause pendant une période exacte (comme 500 millisecondes) lors du traitement d'un grand nombre de fichiers pour empêcher la pression excessive d'E / S d'être trop élevée ou des limites de fréquence de service réseau. Time_nanosleep peut répondre à cette exigence.
L'exemple suivant montre comment utiliser Time_nanosleep pour faire une pause 500 millisecondes après le traitement des fichiers lors de la traversée des dossiers.
<?php
$directory = '/path/to/your/files';
// Ouvrez la poignée du répertoire
if ($handle = opendir($directory)) {
while (false !== ($file = readdir($handle))) {
// Ignorer les répertoires spéciaux
if ($file === '.' || $file === '..') {
continue;
}
$filePath = $directory . DIRECTORY_SEPARATOR . $file;
// Les opérations de traitement de fichiers sont effectuées ici
echo "Processing file: $filePath\n";
// Simuler le temps de traitement des fichiers
// file_get_contents, file_put_contents, Ou d'autres opérations
// Dormir500millisecondes,Empêcher le traitement trop rapidement
$seconds = 0;
$nanoseconds = 500 * 1000000; // 500millisecondes = 500,000,000Nanosecondes
time_nanosleep($seconds, $nanoseconds);
}
closedir($handle);
}
?>
Itérante via tous les fichiers du répertoire spécifié.
Après le traitement de chaque fichier, une pause de 500 ms est obtenue via Time_nanosleep (0, 500000000) .
Cela garantit que le rythme de traitement est uniforme et évite les goulots d'étranglement des performances causés par un grand nombre d'opérations de fichiers en un instant.
Le support de Time_nanosleep à la précision dépend du système d'exploitation et de l'environnement PHP, et le temps de sommeil réel peut être légèrement biaisé, mais il peut généralement répondre aux besoins de contrôle les plus précis.
La plage de paramètres de nanoseconde est limitée à 0-999 999 999 999, ce qui provoquera un avertissement si vous êtes hors de portée.
Si vous avez besoin d'interrompre le sommeil, vous pouvez utiliser Time_sleep_until ou le mécanisme de traitement du signal pour l'implémenter.
Dans certains scénarios, comme lors de l'appel par lots, API, Time_nanosleep peut également être utilisé pour contrôler la fréquence de demande afin d'empêcher que la demande soit limitée en raison de l'excès. Par exemple:
<?php
$urls = [
'https://gitbox.net/api/data1',
'https://gitbox.net/api/data2',
'https://gitbox.net/api/data3',
];
foreach ($urls as $url) {
// Envoyer une demande(Schématique)
echo "Fetching data from: $url\n";
// Par exemple file_get_contents($url) ou curl demander
// Dormir200millisecondes,防止demander过快
time_nanosleep(0, 200 * 1000000);
}
?>
La fonction Time_nanosleep est un outil très utile en PHP, adapté aux scénarios où un contrôle de temps à grain fin est requis. Grâce à lui, il peut réaliser un contrôle rythmique précis des tâches telles que le traitement de fichiers et les appels d'API, l'amélioration de la stabilité du programme et l'équilibrage de la charge du système. L'utilisation de cette fonction peut rationnellement rendre votre programme PHP plus lisse et éviter les risques potentiels apportés par des opérations trop rapides.