Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2050 connectés 

  FORUM HardWare.fr
  Programmation
  C

  processus et boucle infinie -> ressources CPU à 100% ou pas?

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

processus et boucle infinie -> ressources CPU à 100% ou pas?

n°1313888
namerh
Posté le 26-02-2006 à 20:40:09  profilanswer
 

:hello:  
 
supposons que je crée une boucle infinie au sein d'un processus ou d'un thread..
 
à l'execution, on n'aura pas 100% des ressources du CPU occupées, si?

 
j'ai fait qques essais avec un createprocess() mais ma boucle monopolise le CPU.. donc j'ai un doute..
 
merci
 
Edit:
P.S. sur un O.S. préemptif !

Message cité 1 fois
Message édité par namerh le 26-02-2006 à 21:45:18
mood
Publicité
Posté le 26-02-2006 à 20:40:09  profilanswer
 

n°1313892
Emmanuel D​elahaye
C is a sharp tool
Posté le 26-02-2006 à 20:50:50  profilanswer
 

namerh a écrit :

supposons que je crée une boucle infinie au sein d'un processus ou d'un thread..
 
à l'execution, on n'aura pas 100% des ressources du CPU occupées, si?



Ben si, et sous Linux 2.4 (non préemptif), ça tue. Inclus un usleep(100) dans la boucle, ca va donner de l'air.
 
Tu parles de CreateProcess() (Windows). Ca va ramer sérieusement. Inclus un Sleep(1)...
 
Mais il y a certainement un problème de conception. Que veux-tu faire exactement ?

Message cité 1 fois
Message édité par Emmanuel Delahaye le 26-02-2006 à 20:53:51

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1313901
sircam
I Like Trains
Posté le 26-02-2006 à 21:38:17  profilanswer
 

Emmanuel Delahaye a écrit :

Mais il y a certainement un problème de conception. Que veux-tu faire exactement ?


Ralentir la bécane à mort ou la rendre inopérante ?    [:pingouino]  


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
n°1313903
Mackila
Posté le 26-02-2006 à 21:38:26  profilanswer
 

Linux 2.4 pas préemptif  :??:  
 
Enfin comme déja demandé, que veux tu faire ?
Si un programme a besoin de faire des calculs lourds (il n'attend rien de l'extérieur, il ne donne pas de temps aux autres à coup de Sleep() et autres,...), c'est normal que le processeur se trouve utilisé à fond tant que le calcul n'est pas fini...

n°1313908
Emmanuel D​elahaye
C is a sharp tool
Posté le 26-02-2006 à 21:45:50  profilanswer
 

Mackila a écrit :

Linux 2.4 pas préemptif  :??:


http://sic.epfl.ch/SA/publications [...] ge9ag.html
"Par défaut, le noyau de Linux 2.4 n'est pas préemptif."


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1313909
namerh
Posté le 26-02-2006 à 21:46:48  profilanswer
 

ah désolé je n'ai pas précisé que le système utilisé est préemptif..
 
donc je repose la question, un sleep() est-il toujours nécessaire à l'intérieur d'une boucle infinie, meme sur un système préemptif?
 
(ce que je fais est classé top secret :D .. bon disons que je m'initie à la prog système.. et que j'ai besoin d'un thread qui utilise une boucle non-stop pour gérer des événements clavier.. voila en gros.. mais ça dépasse l'objet de ma question ;))


Message édité par namerh le 26-02-2006 à 21:47:44
n°1313911
Emmanuel D​elahaye
C is a sharp tool
Posté le 26-02-2006 à 21:50:57  profilanswer
 

namerh a écrit :

ah désolé je n'ai pas précisé que le système utilisé est préemptif..
 
donc je repose la question, un sleep() est-il toujours nécessaire à l'intérieur d'une boucle infinie, meme sur un système préemptif?


C'est moins critique qu'en coopératif, mais c'est quand même bien crade et c'est pas gentil pour les autres processus et threads...
 

Citation :

(ce que je fais est classé top secret :D .. bon disons que je m'initie à la prog système.. et que j'ai besoin d'un thread qui utilise une boucle non-stop pour gérer des événements clavier.. voila en gros.. mais ça dépasse l'objet de ma question ;))


Les évènements hardware, je les gère (Linux 2.4 embarqué pour Power PC) avec un thread de polling à 100 µs :  

usleep (100);


Message édité par Emmanuel Delahaye le 26-02-2006 à 22:05:28

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1313913
sircam
I Like Trains
Posté le 26-02-2006 à 21:53:32  profilanswer
 

Ecoute, tu fais ce que tu veux. Si tu veux faire une boucle infinie sans pause et donner au process correspondant realtime priority, be my guest.
 
Avec un sleep, il sera peut-être possible d'utiliser la machine, par exemple pour interrompre le process de ton projet secret de hack massif si ça venait à mal tourner.


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
n°1313914
namerh
Posté le 26-02-2006 à 21:53:59  profilanswer
 

ok merci.. ça correspond à mes observations..
 
mes acquis théoriques sur la notion de préemption n'était pas bien assimilés.. je pensais que meme une boucle pouvait etre momentanément suspendue pour laisser un autre thread s'executer mais apparemment pas (sauf si on le prévoit en faisant un sleep)

Message cité 1 fois
Message édité par namerh le 26-02-2006 à 21:54:27
n°1313919
sircam
I Like Trains
Posté le 26-02-2006 à 21:56:22  profilanswer
 

namerh a écrit :

mes acquis théoriques sur la notion de préemption n'était pas bien assimilés.. je pensais que meme une boucle pouvait etre momentanément suspendue pour laisser un autre thread s'executer mais apparemment pas (sauf si on le prévoit en faisant un sleep)


 :heink:  


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
mood
Publicité
Posté le 26-02-2006 à 21:56:22  profilanswer
 

n°1313920
++fab
victime du syndrome IH
Posté le 26-02-2006 à 21:57:02  profilanswer
 

Emmanuel Delahaye a écrit :

http://sic.epfl.ch/SA/publications [...] ge9ag.html
"Par défaut, le noyau de Linux 2.4 n'est pas préemptif."


 
Pour 2.4, il y a les patchs low-latency d'Andrew Morton et premmption de Robert Love.

n°1314003
matafan
Posté le 27-02-2006 à 04:40:56  profilanswer
 

Emmanuel Delahaye a écrit :

http://sic.epfl.ch/SA/publications [...] ge9ag.html
"Par défaut, le noyau de Linux 2.4 n'est pas préemptif."


 
C'est le noyau lui-même qui n'est pas préemptif, mais les applis sont préemptées... Même en 2.4, une appli qui fait une boucle infinie en user space perd le cpu si un autre process a besoin du cpu. C'est la définition d'un système préemptif. Linux 2.4 est un système préemptif.
 
Celà dit, que le système soit préemptif ou non ne change pas grand chose au problème. Si tu peux faire autrement, faire une boucle infinie "active" n'est jamais une bonne solution. Il y a surement moyen d'endomir ton thread en attendant l'évenement qui l'intéresse.

n°1314011
Emmanuel D​elahaye
C is a sharp tool
Posté le 27-02-2006 à 08:48:12  profilanswer
 

matafan a écrit :

C'est le noyau lui-même qui n'est pas préemptif, mais les applis sont préemptées...


Ah, ok. J'écris plus de drivers que d'applications, désolé !
 
 
 


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  processus et boucle infinie -> ressources CPU à 100% ou pas?

 

Sujets relatifs
XML XSL et fichier volumineux : 100 MoProbleme de variables et de boucle (DOS)
Prob d'arret d'une boucle for sur scilab (rigoler pas je débute ;)boucle if
[JAVA] attendre autrement qu'avec une boucle videPk ça boucle pas :'(
Boucle Simultané ?Sous programme dans une boucle --> paramètre?????
Noms de variables et dossier dans une bouclep----n de boucle for
Plus de sujets relatifs à : processus et boucle infinie -> ressources CPU à 100% ou pas?


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR