Faire un don ! | | style | statistiques | contactez-nous | plan | lettre d'information

Programmation.c : Cron ou sleep() ?

Posté par Ludovic Rivallain (aka Creasy) (page perso, ) le 17 mars 2008

Bonjour,



Je me colle d'ici peu au codage d'un petit programme qui vérifiera chaque minute la correspondance entre l'heure actuelle et l'heure de réveil demandée par des utilisateurs d'un service téléphonique basé sur Asterisk (info placée dans un fichier).



J'avais déjà le même programme codé avec les pieds et en bash (vite fait, bien fait fonctionnel, mais comme le nombre d'utilisateurs explose, j'ai décidé de le recoder en C (et avec les mains cette fois) pour réduire le temps d'exécution et limiter la consommation de performances.



Avant j'utilisais cron pour lancer chaque minute ce petit script.



J'en viens à ma question:

Est-il plus "performant" d'utiliser cron pour ce genre de tâche (lancer le programme toutes les minutes) ou d'utiliser un "sleep()" dans le programme (qui sera lancé en daemon du coup) avec un temps de repos variable selon le temps qu'a duré l'exécution?



(non je ne cherche pas à créer un nouveau troll cron Vs sleep() ;-) )



Et quels sont les avantages/inconvénients de ces deux solutions?



En gros si j'utilisais "sleep()" j'imagine un truc comme:

  1. Exécution du programme,
  2. Juste avant la fin on regarde qu'elle heure il est et on en déduis le temps qu'il reste jusqu'à la prochaine minute,
  3. On patient le temps calculé,
  4. On reboucle en "1".


Merci d'avance pour vos lumières.



Ludo,

> Lire le message (13 commentaires, moyenne: 2,5).  

Vous avez demandé le commentaire #914326.

je ne vois pas l'interet

Posté par NeoX () le 17/03/2008 à 13:26. (lien). Évalué à 2.

de ton usage de sleep

- calculer le temp qu'il reste avant la prochaine minute
- sleep du temps qui reste
- relancer la fonction

mais cela peut etre efficace si ton programme met soudain plus d'une minute à s'executer (explosion du nombre d'utilisateur)

en effet avec cron, il lancerait systematiquement ton programme toutes les minutes.

Evidemment tu peux
- mettre un fichier lock
- lancer ta fonction
- detruire le fichier lock

c'est peut-etre plus propre que le sleep d'un temps variable...

--
Apprendre par les autres, c'est bien.
Apprendre par soi-meme (RTFM, man, et notre ami google) c'est mieux
  • [^]Re: je ne vois pas l'interet

    Posté par Ludovic Rivallain (aka Creasy) (page perso, ) le 17/03/2008 à 16:17. (lien). Évalué à 2.

    Oui oui je comptais bien protéger ça un max au cas où quelque chose provoquerais un temps d'exécution plus important que la minute.

    D'après mes premiers tests une exécution dans des conditions normales ne devraient pas dépasser les quelques secondes avant d'avoir des milliers d'utilisateurs, donc je me méfie plus d'un encombrement du serveur.

    Cron n'aurait pas ce problème...