Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Prozessorauslastung bei Schleifen (https://www.delphipraxis.net/123096-prozessorauslastung-bei-schleifen.html)

TheMiller 27. Okt 2008 16:49


Prozessorauslastung bei Schleifen
 
Guten Abend!

Ich schreibe gerade ein gaaanz simples Programm, welches Aktionen in einer Schleife solange ausführt, bis sie der User abbricht. Dabei geschehen keinerlei großen Berechnungen und die Schleife ist auch nicht groß. Allerdings ist die Auslastung meines Prozessors bei 90% - 100%. Nun, ich benutze kein Sleep in der while-Schleife.

Da es sein kann, dass diese Schleife mehrere Stunden läuft, stelle ich mir die Frage, ob das nicht für den Prozessor "gefährlich" sein kann, wenn er permanent auf so einer Belastung läuft. Kann das sein?

Wieso ist die Auslastung eigentlich überhaupt so hoch bei Schleiden?

Danke im Voraus!

Medium 27. Okt 2008 16:55

Re: Prozessorauslastung bei Schleifen
 
Zitat:

Zitat von DJ-SPM
ob das nicht für den Prozessor "gefährlich" sein kann, wenn er permanent auf so einer Belastung läuft. Kann das sein?

Nein, nicht wenn er normal gekühlt wird. Wenn sie das nicht ab könnten, also das wäre schon ein Hammer ^^
Edith übernimmt hier jedoch keine Verantwortung für Abenteurer die meinen die letzten 0,1% durch Übertaktung herausholen zu müssen, oder gar eine Kühlung Marke Eigenbau einsetzen.

Zitat:

Zitat von DJ-SPM
Wieso ist die Auslastung eigentlich überhaupt so hoch bei Schleiden?

Weil... nun ja, halt die ganze Zeit etwas zu tun ist. Ich finde das recht offensichtlich um ehrlich zu sein.

Der_Unwissende 27. Okt 2008 16:56

Re: Prozessorauslastung bei Schleifen
 
Hi,

Zitat:

Zitat von DJ-SPM
Da es sein kann, dass diese Schleife mehrere Stunden läuft, stelle ich mir die Frage, ob das nicht für den Prozessor "gefährlich" sein kann, wenn er permanent auf so einer Belastung läuft. Kann das sein?

Nein, da brauchst Du Dir keine Sorgen zu machen. Die meisten Prozessoren wurden dafür gebaut, dass sie auch benutzt werden. Dass es dabei mal zu hoher Rechenleistung kommt ist durchaus normal. Kennst Du sicherlich von Spielen oder vielleicht HD-Filmen, die belasten auch mal längere Zeit die CPU (häufig wenn die Grafikkarte nicht zur Entlastung beiträgt), jedenfalls geht das schon. Trotzdem sollte HW natürlich nie zu warm werden, bekommt der überhaupt nicht gut. Solltest Du also eine aktuelle CPU (nicht Atom ohne Kühlung betreiben hast Du ein Problem... Auch nicht wirklich. Moderne Systeme haben ein paar (ungenaue, aber ausreichende) Temperatursensoren, die sorgen für eine rechtzeitige Abschaltung (trotzdem lieber nicht ausprobieren!)

Zitat:

Zitat von DJ-SPM
Wieso ist die Auslastung eigentlich überhaupt so hoch bei Schleiden?

Nun ja, Dein Programm nutzt immer die volle Rechenzeit die es bekommt. Ist kein anderes Programm (gleicher oder höherer Priorität) an dieser interessiert, wird Dein Programm also eine Menge davon bekommen. Und das Programm selbst macht was Du ihm sagst, in einer Schleife wiederholt es also eine bestimmte Aktion. Entsprechend hängt die CPU - Auslastung allein davon ab, was Du in Deiner Schleife machst. Setzt Du z.B. ein Application.ProcessMessages(); ein, sinkt die Rechenzeit (die Suche verrät Dir auch warum)

jfheins 27. Okt 2008 17:21

Re: Prozessorauslastung bei Schleifen
 
Ich werfe jetzt einfach mal ein üaar Dinge ein :mrgreen:
[quote="DJ-SPM"]Allerdings ist die Auslastung meines Prozessors bei 90% - 100%.
Zitat:

Bei mir läuft das Teil bestimmt nur mt 25% Prozessorauslastung :P

Zitat:

Da es sein kann, dass diese Schleife mehrere Stunden läuft, stelle ich mir die Frage, ob das nicht für den Prozessor "gefährlich" sein kann, wenn er permanent auf so einer Belastung läuft. Kann das sein?

Nein. Prozessoren werden ja dafür ausgelegt, belastet zu werden.
(Ich stelle mir grad vor "Ich habe ein Auto gekauft - ist es gefährlich, weenn ich damit längere Zeit fahre?" :mrgreen: )


Zitat:

Zitat von Der_Unwissende
Setzt Du z.B. ein Application.ProcessMessages(); ein, sinkt die Rechenzeit (die Suche verrät Dir auch warum)

Häufiger Irrglaube. Wenn keine Messsages zu verarbeiten sind, macht Application.Processmessages auch nichts. Auch ein sleep(0) hilft nicht immer - wenn kein anderer Prozess rechnen will, wird eben derselbe Prozess direkt wieder drankommen.

also kann auch ein
Delphi-Quellcode:
while true do begin inc(i); sleep(0); end;
Einen Kern voll auslasten.

P.S, bei meinem Notebook ist einemal beim DVD-gucken der Lüfter ausgefallen - es ist bei 105° einfach ausgegangen :mrgreen:

xZise 27. Okt 2008 18:11

Re: Prozessorauslastung bei Schleifen
 
Zitat:

Zitat von jfheins
Ich werfe jetzt einfach mal ein üaar Dinge ein :mrgreen:
Zitat:

Zitat von DJ-SPM
Allerdings ist die Auslastung meines Prozessors bei 90% - 100%.

Bei mir läuft das Teil bestimmt nur mt 25% Prozessorauslastung :P

Nicht wenn er so zukunftsorientiert war und gleich das Multithreaded gemacht hat.

Aber es ist ja klar das der Kern eine 100%ige Auslastung hat, weil er bekommt ständig was zu tun: Zwar nur in der Schleife weiter zu gehen, aber damit ist er nach ein paar Takten durch. Und dann kommt schon die nächste Aufgabe: Die Schleife weitermachen.

Zitat:

Zitat von Der_Unwissende
Setzt Du z.B. ein Application.ProcessMessages(); ein, sinkt die Rechenzeit (die Suche verrät Dir auch warum)

Häufiger Irrglaube. Wenn keine Messsages zu verarbeiten sind, macht Application.Processmessages auch nichts.[/quote]
Aber er muss dennoch nachgucken: Sind Messages zu verarbeiten ... Also hast du danach vielleicht 99% statt 100%

MfG
xZise


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:57 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz