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.
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
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.
> 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.
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().
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
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...
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. :-)
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?
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.
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.
> 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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.