Forum: PC-Programmierung Frage zur CPU-Auslastung


von Kloni (Gast)


Lesenswert?

Hallo,

schon seit langer Zeit können die CPUs in PCs Gas geben, oder Gas raus 
nehmen, was man z.B. bei WinXP im Task-Manager -> Systemleistung -> 
CPU-Auslastung sehen kann.

Muss das Gas geben bzw. das Gas raus nehmen explizit programmiert werden 
(z.B. rechenintensives Unterprogramm = Vollgas, Warten auf ein Ereignis 
im Main-Loop im Standgas), oder erkennt der PC von selber, wann er Gas 
geben muss?

Vielen Dank schon mal im Voraus für die Infos.

Herbert H.

von Upps (Gast)


Lesenswert?

Beim PC kennt sich eh keine Sau aus weil zu komplex...

von Bernd Bremse (Gast)


Lesenswert?

Kloni schrieb:
> Muss das Gas geben bzw. das Gas raus nehmen explizit programmiert werden
> (z.B. rechenintensives Unterprogramm = Vollgas, Warten auf ein Ereignis
> im Main-Loop im Standgas), oder erkennt der PC von selber, wann er Gas
> geben muss?

Ja, wobei der PC selbst entscheidet, wenn er Gas wegnimmt. bspw. weil 
ihm zuheiss wird.

https://de.wikipedia.org/wiki/Throttling

von Irgendwer (Gast)


Lesenswert?

Kloni schrieb:
> Warten auf ein Ereignis
> im Main-Loop im Standgas)

Die Steuerung macht der Taskmanager. Wenn du mit "dirty waits" wartest 
wird nicht runtergetaktet und der Task rennt mit 100%. Wenn du dem 
scheduler die Kontrolle übergibst wird auch entsprechend runter getaktet 
bzw. die CPU-Last sinkt entsprechend.

von NoJS (Gast)


Lesenswert?

> mit "dirty waits" wartest

Das scheint die bevorzugte Methode der Webf1ckler zu sein.
Kaum ist Javascript an, läuft der Lüfter auf Hochtouren.

Mein Trost: Es gibt genug Bäume in Deutschland.

von Jim M. (turboj)


Lesenswert?

Kloni schrieb:
> oder erkennt der PC von selber, wann er Gas
> geben muss?

Windows ist etwas cleverer designt. Alle Programme (außer Console) 
haben eine grundlegende Schleife für Messages:
1
while(GetMessage(&Msg, NULL, 0, 0) > 0)
2
{
3
    TranslateMessage(&Msg);
4
    DispatchMessage(&Msg);
5
}


Und das GetMessage() blockiert wenn keine Message vorhanden ist. Damit 
weiss der Scheduler das Dein Programm (genauer der Message Thread) 
gerade keine CPU Zeit benötigt.

Komplizierter wird es bei zusätzlichen Threads - da gäbe es 
Wartefunktionen wie Sleep() oder WaitForSingleObject(), 
WaitForMultipleObjects().

von (prx) A. K. (prx)


Lesenswert?

Kloni schrieb:
> schon seit langer Zeit können die CPUs in PCs Gas geben, oder Gas raus
> nehmen, was man z.B. bei WinXP im Task-Manager -> Systemleistung ->
> CPU-Auslastung sehen kann.

XP zeigt nur die Auslastung, spätere Versionen auch die sich heute immer 
wieder ändernde Taktfrequenz. Auslastung ohne Taktfrequenz ist nur die 
halbe Miete.

> Muss das Gas geben bzw. das Gas raus nehmen explizit programmiert werden
> (z.B. rechenintensives Unterprogramm = Vollgas, Warten auf ein Ereignis
> im Main-Loop im Standgas), oder erkennt der PC von selber, wann er Gas
> geben muss?

Eine einfache Mainloop ist Dauer-Vollgas. Wenn du Luft rauslassen 
willst, dann baust du dort ein sleep() ein. Dann wird dieser Thread dort 
inaktiv und das Betriebssystem weiss es und nutzt es aus. Nicht so viel 
anders als ein Mikrocontroller, der dann einpennt und Strom spart.

Das gleiche geschieht auch, wenn das Programm in einem anderen 
Systemaufruf wartet, z.B. auf eine GUI-Event, oder ein Stück von einem 
File.

: Bearbeitet durch User
von c-hater (Gast)


Lesenswert?

A. K. schrieb:

> Eine einfache Mainloop ist Dauer-Vollgas. Wenn du Luft rauslassen
> willst, dann baust du dort ein sleep() ein.

NEIN. Das ist zwar schon viel besser als eine busy loop, aber nicht 
wirklich gut. Die verwendung von Sleep() zeigt eigentlich nur eins: der 
Herr Programmierer ist nicht in der Lage, ein ereignisgesteuertes 
Programm korrekt zu implementieren...

von Theor (Gast)


Lesenswert?

Das kommt darauf an: Einige fahren auch mit Schweröl. Bei anderen muss 
man einen Zahn zulegen oder ein paar Kohlen oder Holzscheite nachlegen.
Alles etwas aufwendigere Mechanismen. Schweröl z.B. muss erwärmt werden, 
sonst geht es gar nicht durch die Leitungen.

:-)

von Kloni (Gast)


Lesenswert?

Bevor das allseits beliebte Hauen und Stechen losgeht:

Hauptärgernis ist (wie von NoJS schon beschrieben) das Internet. Bei 
immer mehr Seiten sehe ich die doppelte Stromaufnahme und dann läuft der 
Staubsauger und ich heize die Wohnung :-( Selbst wenn auf der Seite 
nichts passiert. Oft kann man sogar den Browser minimieren, die CPU 
bleibt auf Vollgas. Man muss erst die entsprechende Seite (den Tab) 
schließen, damit die CPU vom Gas geht.

Hier im Forum ist dies übrigens super gelöst: Nur solange die Seite 
geladen bzw. aufgebaut wird, sehe ich Vollgas. Beim Lesen oder Tippen 
sehe ich ausschließlich Standgas.

Dann sind es ältere Programme z.B. aus der Win98 Ära, die Laufen vom 
Start an auf Vollgas, auch minimiert. Nur ein Programm ist so 
intelligent, dass es minimiert vom Gas geht. Neuere Programme geben nur 
Vollgas, wenn wirklich Arbeit anliegt. Arbeit beendet, dann Standgas. 
Sehe ich auch an der Leistungsanzeige, die hier beim Notebook zwischen 
15 und 30 Watt schwankt.

Kann man nur Vollgas und Leerlauf programmieren, oder gibt es auch 
Zwischenstufen?

von Eddy C. (chrisi)


Lesenswert?

Bei den heute üblichen Quadcore-CPUs bedeutet dieses „Vollgas“ aber auch 
nur ein Viertel der maximalen Last. Evtl. noch etwas mehr wegen 
Turbotakt für diesen einen Kern.

von A. S. (Gast)


Lesenswert?

c-hater schrieb:
> Die verwendung von Sleep() zeigt eigentlich nur eins: der Herr
> Programmierer ist nicht in der Lage, ein ereignisgesteuertes Programm
> korrekt zu implementieren...

Oder dass die SW etwas komplexer ist als auf Anfragen zu reagieren. 
SPS-Loop das ne Event-loop haben beide ihre Berechtigung. Rein 
ereignisgesteuert ist eher was für nieschen.

von NoJS (Gast)


Lesenswert?

> Hauptärgernis ist (wie von NoJS schon beschrieben) das Internet.

Mann kann JS auch einfach ausschalten.

Bei "reinen" Nachrichtenseiten hält sich der Bequemlichkeitsverlust
in Grenzen.

Erspart einem nebenbei auch jede Menge S.P.A.M. und närfige
"Die Seite wurde aktualiest"-Meldungen.

Am einfachsten geht das mit 2 Browserinstanzen.

Einer mit aktiviertem JS und einer ohne.

von Kloni (Gast)


Lesenswert?

NoJS schrieb:
> Mann kann JS auch einfach ausschalten.
> Bei "reinen" Nachrichtenseiten hält sich der Bequemlichkeitsverlust
> in Grenzen.

Da hat sich scheinbar was geändert. Bei früheren Versuchen las ich auf 
vielen Seiten die Meldungen: Schalten Sie gefälligst JS ein ...

Werde JS mal ausgeschaltet halten und schauen was geht.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.