Maison >cadre php >Swoole >Pourquoi Swoole ne peut-il pas dormir ?

Pourquoi Swoole ne peut-il pas dormir ?

WBOY
WBOYoriginal
2022-04-13 15:09:282742parcourir

Parce que dans Swoole, l'utilisation de la fonction Sleep entraînera le blocage du processus de sommeil ; seuls les signaux peuvent interrompre le processus de sommeil. Étant donné que le signal de Swoole est basé sur signalfd, le sommeil ne peut pas être interrompu même si un signal est envoyé, seulement jusqu'à ce que le signal soit envoyé. heure spécifiée Ce n'est qu'à ce moment-là que le système d'exploitation réveillera le processus en cours.

Pourquoi Swoole ne peut-il pas dormir ?

L'environnement d'exploitation de ce tutoriel : système Windows 10, version Swoole 4, ordinateur DELL G3

Pourquoi swoole ne peut pas utiliser sleep

Dans les programmes IO asynchrones, sleep/usleep/time_sleep_until/time_nanosleep n'est pas autorisé. (le sommeil est utilisé ci-dessous pour désigner toutes les fonctions de veille en général) La fonction de veille entraînera le blocage du processus de veille. Le système d'exploitation ne réveillera pas le processus en cours avant l'heure spécifiée. Pendant le processus de veille, seuls les signaux. peut être interrompu

  • Étant donné que le traitement du signal de Swoole est basé sur signalfd, le sommeil ne peut pas être interrompu même si un signal est envoyé

  • Swoole_event_add, swoole_timer_tick, swoole_timer_after, swoole_process::signal, swoole_client asynchrone fourni par Swoole sont dans le processus le sommeil cessera de fonctionner plus tard. swoole_server ne peut plus gérer les nouvelles requêtes.

  • Programme d'instance

    $serv = new swoole_server("127.0.0.1", 9501);
    $serv->set(['worker_num' => 1]);
    $serv->on('receive', function ($serv, $fd, $from_id, $data) {
        sleep(100);
        $serv->send($fd, 'Swoole: '.$data);
    });
    $serv->start();
  • La fonction sleep est exécutée dans l'événement onReceive et le serveur ne peut plus recevoir de requêtes client dans les 100 secondes.
  • Apprentissage recommandé :

    Tutoriel swoole

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn