Position actuelle: Accueil> Derniers articles> Utilisez Time_nanosleep pour mettre en œuvre des tâches de file d'attente de sondage toutes les 0,5 secondes

Utilisez Time_nanosleep pour mettre en œuvre des tâches de file d'attente de sondage toutes les 0,5 secondes

gitbox 2025-05-29

Dans le développement réel, le sondage est un moyen courant de planification des tâches, en particulier lors de la gestion des tâches de file d'attente. Bien que le PHP ne soit pas un langage naturel adapté à la mémoire à long terme, il peut également obtenir un contrôle de sondage relativement précis en mode CLI combiné à un contrôle de temps raisonnable. Cet article présentera comment utiliser la fonction Time_nanosleep de PHP pour implémenter des tâches de file d'attente de sondage précises toutes les 0,5 secondes.

1. Pourquoi choisir Time_nanosleep

PHP fournit plusieurs fonctions qui retardent l'exécution, telles que le sommeil , l'USOep et le temps_nanosleep . dans:

  • Le sommeil (int $ secondes) ne peut être utilisé qu'en secondes et a une faible précision.

  • Usleep (int $ micro_seconds) peut prendre en charge les microsecondes, mais ne peut pas gérer les interruptions.

  • Time_nanosleep (int $ seconds, int $ nanoseconds) fournit un délai de niveau nanoseconde et peut retourner le temps restant lorsqu'il est interrompu, adapté à un contrôle de haute précision.

Par conséquent, pour atteindre l'objectif de "sonder toutes les 0,5 secondes", Time_nanosleep est un choix plus idéal.

2. Grammaire de base

 bool time_nanosleep(int $seconds, int $nanoseconds)

Cette fonction pause l'exécution du script actuel jusqu'à ce que le temps spécifié se soit écoulé. La plage de valeur des nanosecondes est de 0 à 999 999 999.

3. Exemples de mise en œuvre des files d'attente de sondage

Voici un exemple de script PHP qui utilise Time_nanosleep pour mettre en œuvre le sondage d'une file d'attente de tâches toutes les 0,5 secondes:

 <?php

function pollQueue()
{
    // Simuler pour obtenir une tâche à partir de la file d&#39;attente de tâche(Remplacez-le par la logique de lecture de file d&#39;attente réelle ici)
    $task = file_get_contents('https://gitbox.net/api/queue/next');

    if ($task) {
        echo "Manipuler les tâches: {$task}\n";
        // Traitement des tâches de simulation
        file_get_contents('https://gitbox.net/api/queue/acknowledge?id=' . urlencode($task));
    } else {
        echo "Aucune tâche actuellement,En attendant...\n";
    }
}

// Continuer à courir
while (true) {
    $start = microtime(true);
    
    pollQueue();

    $end = microtime(true);
    $elapsed = $end - $start;

    // Si le traitement des tâches prend moins de 0.5 Deuxième,mais sleep temps restant
    $remaining = 0.5 - $elapsed;
    if ($remaining > 0) {
        $seconds = floor($remaining);
        $nanoseconds = ($remaining - $seconds) * 1e9;
        time_nanosleep($seconds, (int)$nanoseconds);
    }
}

4. Choses à noter

  1. Gestion des exceptions : Time_nanosleep peut être interrompu par le signal. Il est recommandé d'ajouter une détection d'exception ou d'interruption pour gérer la valeur de retour.

  2. Scénario de concurrence élevée : la méthode d'interrogation ne convient pas aux tâches élevées de concurrence ou de retard. Il est recommandé de l'utiliser en combinaison avec des files d'attente de messages telles que RabbitMQ et Redis Streams.

  3. Contrôle de l'occupation du processeur : le sondage chronométré peut entraîner une certaine quantité d'occupation du processeur, et il est recommandé d'ajouter un mécanisme de surveillance des ressources.

V. Conclusion

Bien que PHP ne soit généralement pas utilisé pour la planification des tâches de haute précision, avec l'aide de la fonction Time_nanosleep , nous pouvons toujours construire un mécanisme de sondage de tâches concis et efficace. Les exemples ci-dessus fournissent un cadre de base qui peut être élargi et optimisé en fonction des besoins commerciaux spécifiques. Dans les scénarios de gestion des tâches légers et légers, cette méthode est suffisamment efficace et flexible.