CPU Auslastung doch begrenzen?



  • Halöle,

    nach meinem ersten Thread (Volle Auslatung der CPU) bin ich jetzt auf den Trichter gekommen, was passiert, wenn mein Programm auf einem Single-Core Rechner läuft.

    -> CPU Auslastung 100% und das über mehrer Minuten... unter Umständen Stunden.

    Ist das das Problem des Entwicklers die Auslastung gering zu halten? Ich meine natürlich zu brenzen auf einen bestimmten Wert?

    Wenn ja, wie kann man denn dann die Auslastung je Programm begrenzen (ohne den ProgrammCode verändern zu müssen, das geht nämlich bei mir nicht!)?



  • Du kannst die Prozesspriorität verändern.

    greetz, Swordfish



  • Danke für den Tipp.

    Dann werde ich jetzt zuerst die Anzahl an CPU Kernen bestimmen und je nach dem die Prioritäten verändern.



  • Ansonsten kannst du auch ab und an ein "Sleep(0);" einbauen, dann kommen andere Threads an die Reihe. Wirkt sich meiner Meinung nach recht positiv aus, wäre evtl eine Alternative oder sogar ein Zusatz zum Herabsetzen der Priorität.



  • Was ist an der Prozessorauslastung so schlimm? So lange dein Prozess Rechenzeit abgibt, wenn andere Programme sie benötigen ist das doch in Ordnung. Ich habe schließlich keine teure CPU gekauft nur damit sie die meiste Zeit mit nichts tun verbringt.



  • Ganz richtig. Überlaß das dem Benutzer oder, wenn es dich so sehr stört, gib ihm wenigstens die Möglichkeit, die Prozessorpriorität deines Programmes in den Programmoptionen anzupassen.



  • Hallo,

    das war ja genau meine Frage: Soll ich mich als Programmierer darum kümmern?

    Ich hab es mal auf einem Single-Core System getestet. Der Regelfall war, dass während der Laufzeit meines Programmes alle anderen Programme nicht oder nur sehr schwer gestartet werden konnten.

    Da mein Programm sehr rechenintensiv und eine sehr lange Rechenzeit (kann vom Benutzer eingestellt werden) ist bzw. benötigt, so wäre es doch denkbar, dass der User dies nicht akzeptiert. Bei Multi-Core Prozessoren ist dies nicht schlimm, da ja nur ein Prozessorkern voll belastet wird. Die restlichen ein bis drei sind dann für andere Anwendungen zuständig.



  • StefanN schrieb:

    Ich hab es mal auf einem Single-Core System getestet. Der Regelfall war, dass während der Laufzeit meines Programmes alle anderen Programme nicht oder nur sehr schwer gestartet werden konnten.

    Dann würde ich da auf jeden Fall was dran machen. Eines der schlimmsten Sachen imho ist eben das, dass das ganze System durch ein Programm lahmgelegt wird.
    Probiers doch einfach mal aus mit der niedrigeren Priorität und/oder dem "Sleep(0)" an einigen Stellen.

    Du kannst afaik übrigens Prozess- und Thread-Priorität runtersetzen.



  • Genau.

    Ich habe Montag wieder die Möglichkeit das ganze auf einem Single-Core System zu testen.

    Danach werde ich berichten, ob und was sich verändert hat.



  • Wenn Du die abarbeitung nicht verzögern willst aber die anderen Prozesse trotzdem vorrang haben sollen, so ist die einzige Möglichkeit die Priorität Deines Processes/Threads anzupassen!

    Ein "Sleep(0)" hat keine bedeutenden Auswirkungen! Es setzt nur Deinen Thread in der Queue nach hinten; wenn es aber in dieser Prio der einzige ist, so kommt er sofort wieder dran. Auch kommen *nie* andere Threads von niedriger Prio dran!



  • Hallo,

    ich habe es jetzt getestet und die Priorität auf << BELOW_NORMAL << umgestellt. Funktioniert auch sehr gut. Den Unterschied zwischen Single-Core und Multi-Core erspare ich mir, da ja sowieso nur die Single-Core Variante von Bedeutung ist (Getestet ohne << sleep(...) <<).


Anmelden zum Antworten