Programmation.c : Cron ou sleep() ?
Posté par Ludovic Rivallain (aka Creasy) (page perso, ) le 17 mars 2008Bonjour,
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:
- Exécution du programme,
- 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,
- On patient le temps calculé,
- 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 #916510.



et pourquoi pas les variables conditions?
dans les pthread tu as des variables condition :
pthread_cond_timedwait() utilise une date absolue... pas de temps relatif comme sleep.
avantages :
- celà n'utilise pas de pooling... donc plus efficasse.
- tu peut réveiller le processus en signalant la variable condition si jamais la configuration a changée (et donc vérifier ce changement a chaque réveil).
en gros, il s'agit de fabriquer un ordonnanceur/scheduler avec une liste chainée triée... c'est franchement facile, et ce ne sont pas les exemples qui manquent en c.
si tu veux utiliser des outils un petit peut plus haut niveau, rendre ton code un peu plus portable, tu peut utiliser la glib du projet gtk , qui n'utilise pas de dépendance a gtk cependant... tu auras juste une dépendance à la libc+glib, ce qui est acceptable, je pense.
la fonction equivalente a celle des pthread avec la glib est :
g_cond_timed_wait ()
voila, amuse toi bien.