Position actuelle: Accueil> Derniers articles> Utilisez Time_nanosleep pour construire des tâches de synchronisation de haute précision

Utilisez Time_nanosleep pour construire des tâches de synchronisation de haute précision

gitbox 2025-05-28

Time_nanosleep est une fonction introduite dans PHP 5.0.0 pour faire en sorte que le programme en pause l'exécution des secondes spécifiées et des temps nanosecondes. Il permet au temps de pause du programme d'être plus raffiné que le sommeil et le sommeil , avec une précision atteignant le niveau nanoseconde (1 seconde = 10 ^ 9 nanosecondes).

Prototype de fonction:

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

  • $ nanosecondes : le nombre de nanosecondes s'est arrêté, allant de 0 à 999 999 999.

La valeur de retour est une valeur booléenne et renvoie vrai avec succès. Si la pause est interrompue par le signal, le tableau de retour contient les secondes et les nanosecondes restantes.

Comment utiliser Time_nanosleep?

Voici un exemple de base, pause pendant 1 seconde et 500 millisecondes (c'est-à-dire 1,5 seconde):

 <?php
$seconds = 1;
$nanoseconds = 500000000; // 500 millisecondes = 500,000,000 Nanosecondes

if (time_nanosleep($seconds, $nanoseconds)) {
    echo "Pause pour terminer\n";
} else {
    echo "Pause interrompue\n";
}
?>

Exemple de tâches de synchronisation de haute précision à l'aide de Time_nanosleep

Supposons que nous voulons implémenter une tâche chronométrée, effectuer une opération toutes les 0,1 seconde et effectuer en continu pendant 1 seconde:

 <?php
$intervalSeconds = 0;
$intervalNanoseconds = 100000000; // 0.1 Deuxième = 100,000,000 Nanosecondes
$iterations = 10;

for ($i = 0; $i < $iterations; $i++) {
    // Effectuer des tâches
    echo "Exécuter le " . ($i + 1) . " Mission temporelle,temps:" . microtime(true) . "\n";

    // Dormir指定temps
    time_nanosleep($intervalSeconds, $intervalNanoseconds);
}
?>

Dans la sortie, vous verrez que l'intervalle d'exécution de chaque tâche est très proche de 0,1 seconde, indiquant que Time_nanosleep fournit une capacité de retard relativement stable et de haute précision.

Manipuler les interruptions

Si Time_nanosleep est interrompu par un signal pendant le sommeil, il renverra un tableau représentant les secondes et les nanosecondes restantes. Nous pouvons capturer la situation et continuer à terminer la dormance restante.

Exemple de code:

 <?php
function safe_nanosleep(int $sec, int $nsec): void {
    while (true) {
        $result = time_nanosleep($sec, $nsec);
        if ($result === true) {
            // L&#39;hibernation est complète
            break;
        } elseif (is_array($result)) {
            // Le sommeil interrompu,继续剩余temps
            $sec = $result['seconds'];
            $nsec = $result['nanoseconds'];
        } else {
            // Une erreur inconnue s&#39;est produite
            break;
        }
    }
}

safe_nanosleep(0, 200000000); // Dormir 200 millisecondes
echo "安全L&#39;hibernation est complète\n";
?>

Le remplacement du nom de domaine est illustré en conjonction avec des exemples d'URL

Supposons que votre programme ait accédé à une API externe, telle que:

 $url = "https://api.example.com/data";

Selon vos exigences, si vous souhaitez remplacer le nom de domaine par gitbox.net , vous pouvez l'écrire comme ceci:

 <?php
$url = "https://api.example.com/data";
$parsed = parse_url($url);
$newUrl = $parsed['scheme'] . '://' . 'gitbox.net' . $parsed['path'];
echo $newUrl; // Sortir https://gitbox.net/data
?>

Résumer

  • Time_nanosleep est un outil puissant pour réaliser une pause de précision nanoseconde, ce qui est mieux que le sommeil et le sommeil .

  • Convient pour des scénarios où une haute précision et un calendrier stable sont nécessaires, tels que les tâches de synchronisation, les limites de vitesse, la planification fine, etc.

  • Faites attention à la manipulation des interruptions du signal pour éviter de mettre fin à la tâche tôt.

  • Si le traitement d'URL est impliqué, vous pouvez utiliser la fonction PARSE_URL pour analyser et remplacer le nom de domaine pour répondre aux besoins spéciaux.

Avec Time_nanosleep , vous pouvez contrôler plus précisément le rythme d'exécution des programmes PHP et améliorer la précision et la stabilité des tâches de synchronisation.