IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Linux Discussion :

sleep dans une boucle de daemon


Sujet :

Linux

  1. #1
    Membre actif
    Avatar de TheDrev
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    310
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 310
    Points : 263
    Points
    263
    Par défaut sleep dans une boucle de daemon
    Bonjour,
    J'ai vu dans la boucle d'un daemon un appel a sleep(5).
    Je suppose que cela est une tentative pour alléger le cpu.

    ceci soulève les questions suivantes :

    - Es ce efficace ?
    - Si oui, comment choisir le temps de sommeil (j'imagine que cela doit être terriblement empirique)

  2. #2
    Membre émérite Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Points : 2 280
    Points
    2 280
    Par défaut
    Citation Envoyé par TheDrev Voir le message
    J'ai vu dans la boucle d'un daemon un appel a sleep(5).
    Je suppose que cela est une tentative pour alléger le cpu.

    ceci soulève les questions suivantes :

    - Es ce efficace ?
    - Si oui, comment choisir le temps de sommeil (j'imagine que cela doit être terriblement empirique)
    Efficace, ça fait son boulot, ça endort le processus, est ce que c'est une bonne pratique? NON, c'est clairement un défaut dans la conception du daemon. A mon sens, rien ne justifie un appel à sleep() dans un daemon.

  3. #3
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 585
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 585
    Points : 19 462
    Points
    19 462
    Par défaut
    'mettons:
    Citation Envoyé par nicolas.sitbon
    A mon sens, rien ne justifie un appel à sleep() dans un daemon.
    alors comment "endormir" un daemon ?

    par exemple fetchmail, en mode daemon, accepte une temporisation de ses requêtes...
    ?

  4. #4
    Membre émérite Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Points : 2 280
    Points
    2 280
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    'mettons:alors comment "endormir" un daemon ?

    par exemple fetchmail, en mode daemon, accepte une temporisation de ses requêtes...
    ?
    C'est un classique du modèle évènementiel, auquel aucun daemon ne coupe en général, les fonctions de multiplexage d'entrée/sortie acceptent toutes un timeout. Un daemon, même s'il dort, est toujours en attente d'un évènement : une entrée/sortie, un signal, etc.

  5. #5
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Points : 28 123
    Points
    28 123
    Par défaut
    Bonjour,

    Citation Envoyé par nicolas.sitbon Voir le message
    Un daemon, même s'il dort, est toujours en attente d'un évènement : une entrée/sortie, un signal, etc.
    Je ne suis pas forcement d'accord avec ce que tu dis, et dirai plus que cela depend du demon.

    Un processus demonisé peut par exemple collecter des donnees du systeme. Dans ce cas, ne pas le mettre en attente et traiter tout a la volee te fait courir un risque sur la consistence des donnees. Il vaut donc mieux endormir ton processus pour un temps donne, et qu'il traite les donnees par paquet lorsqu'il se reveille.

    Par ailleurs, l'attente active coute tres cher en CPU, et ne se justifie que tres tres rarement. Un micro-sleep est souvent introduit dans les demons pour ne pas trop consommer.

  6. #6
    Membre émérite Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Points : 2 280
    Points
    2 280
    Par défaut
    Citation Envoyé par gangsoleil Voir le message
    Je ne suis pas forcement d'accord avec ce que tu dis, et dirai plus que cela depend du demon.
    En effet, cela dépend du daemon.

    Citation Envoyé par gangsoleil Voir le message
    Un processus demonisé peut par exemple collecter des donnees du systeme. Dans ce cas, ne pas le mettre en attente et traiter tout a la volee te fait courir un risque sur la consistence des donnees. Il vaut donc mieux endormir ton processus pour un temps donne, et qu'il traite les donnees par paquet lorsqu'il se reveille.
    Là, je ne suis pas certain de t'avoir compris, dans tous les cas, si tu parles d'un daemon qui fait simplement une collecte de données toutes les heures, dans ce cas, l'emploi d'un daemon est injustifié, une tache cron serait plus judicieuse.

    Citation Envoyé par gangsoleil Voir le message
    Par ailleurs, l'attente active coute tres cher en CPU, et ne se justifie que tres tres rarement. Un micro-sleep est souvent introduit dans les demons pour ne pas trop consommer.
    On est d'accord, à vrai dire, j'ignore pourquoi tu en parles puisqu'il n'est pas question d'attente active ici.

  7. #7
    Membre actif
    Avatar de TheDrev
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    310
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 310
    Points : 263
    Points
    263
    Par défaut
    pour les daemons qui doivent executer le plus raisonnablement possible leur taches repetitives (monitoring de machines distantes) quelle est la valeur du Sleep ? J'ai mis 2 minutes car le CPU est moins surchargé mais cette descision est terriblement empirique pour le la prog systeme...

Discussions similaires

  1. Thread sleep dans une boucle
    Par Sharcoux dans le forum Général Java
    Réponses: 7
    Dernier message: 17/03/2013, 19h29
  2. Méthode Wait,Sleep dans une boucle
    Par kilian68 dans le forum Interfaces Graphiques en Java
    Réponses: 2
    Dernier message: 17/12/2009, 11h50
  3. Comment faire un Sleep dans une boucle PL/SQL
    Par foster06 dans le forum PL/SQL
    Réponses: 3
    Dernier message: 01/02/2008, 18h59
  4. [Vb.net] Indexé un objet crée dans une boucle
    Par picpic dans le forum Windows Forms
    Réponses: 10
    Dernier message: 17/12/2003, 14h37
  5. Pause dans une boucle
    Par HT dans le forum Langage
    Réponses: 4
    Dernier message: 03/06/2003, 08h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo