it-swarm.com.de

Warum sollte Ihr Code nicht 100% CPU verwenden?

Ich spreche speziell von einem C # .NET 4-Programm, das unter Windows ausgeführt wird XP oder höher), aber allgemeine Antworten sind auch akzeptabel.

Nehmen Sie ein bereits optimiertes und effizientes Programm an. Das Problem liegt hier ausschließlich in den Auswirkungen einer hohen CPU-Auslastung auf die Hardware und in der Frage, ob ein Programm mit hoher Auslastung gedrosselt werden sollte, um den Verschleiß zu verringern, und nicht darin, ob meine Implementierung effizient ist.

Ein Kollege schlug heute vor, dass ich bei meinen Datenladeprozessen keine 100% ige CPU-Auslastung anstreben sollte, da "moderne CPUs billig sind und sich bei 100% CPU schnell verschlechtern".

Ist das wahr? Und wenn ja, warum? Ich hatte zuvor den Eindruck, dass eine 100% ige CPU-Auslastung für einen intensiven oder langen Betrieb vorzuziehen ist, und ich konnte in keiner Weise seriöse Quellen zu diesem Thema finden.

42
Nick Udell

Wenn die Kühlung nicht ausreicht, kann die CPU überhitzen. Aber sie alle (zumindest alle modernen PC-CPUs) verfügen über verschiedene Wärmeschutzmechanismen, die die Taktrate drosseln oder als letztes Mittel abschalten.

Ja, auf einem staubigen Laptop kann eine 100% ige CPU-Auslastung vorübergehende Probleme verursachen, aber nichts wird kaputt gehen oder sich "verschlechtern" (was auch immer das bedeutet).

Bei CPU-gebundenen Problemen ist eine CPU-Auslastung von 100% der richtige Weg.

Die Reaktionsfähigkeit der Anwendung (UI) ist ein von der CPU-Auslastung getrenntes Konzept. Es ist durchaus möglich, eine nicht reagierende Anwendung mit 1% CPU oder eine reaktionsfähige Anwendung mit 100% CPU zu haben. Die Reaktionsfähigkeit der Benutzeroberfläche hängt vom Arbeitsaufwand im UI-Thread und der Priorität des UI-Threads gegenüber anderen Threads ab.

59
Joonas Pulakka

Windows-Programme (Winforms/WPF) sollten jederzeit ansprechbar bleiben. Mit einer naiven Implementierung eines Prozesses, der 100% CPU-Ressourcen verwendet, ist es allzu einfach, Ihr Programm oder sogar Ihr System träge und hängend erscheinen zu lassen.

Bei einer guten Implementierung (zum Beispiel: Verwenden Sie einen separaten Thread mit niedrigerer Priorität) sollte dies kein Problem sein.

Sie sollten sich keine Sorgen machen, dass Ihre CPU früher kaputt geht.

15
Pieter B

Es ist im Allgemeinen nichts Falsches an einem Programm, das 100% CPU verwendet während es tatsächlich nützliche Arbeit leistet und sich keine Zeit für etwas Wichtigeres nimmt. Wenn eine bestimmte Hardwareplattform z.B. Nur in der Lage, 100% der CPU eine Sekunde lang ununterbrochen zu nutzen, bevor sie auf 50% zurückgedrosselt werden muss, um eine Überhitzung zu vermeiden. Im Allgemeinen ist es besser, wenn eine Anwendung die nützliche Arbeit leistet so schnell wie möglich ausgeführt wird kann und die CPU oder das Betriebssystem alle erforderlichen Drosselungen durchführen lassen, als dass eine Anwendung erraten kann, wie schnell sie "ausgeführt" werden soll. Wenn eine Anwendung oder ein Thread Arbeiten mit niedriger Priorität ausführen muss, die nützlich, aber nicht immer kritisch sind, kann es für das Betriebssystem hilfreich sein, die CPU-Auslastung für Aufgaben mit niedriger Priorität auf 50% zu beschränken, damit die CPU dies tun muss Etwas schnell wird es bereit sein, für eine Sekunde zu "sprinten", aber die Anwendung sollte sich über solche Dinge nicht Gedanken machen, außer eine niedrige Thread-Priorität anzufordern.

Die größten Situationen, in denen es schlecht ist, 100% CPU zu verwenden, sind:

  • Die Anwendung wartet auf ein Ereignis, das nicht durch ständiges Abrufen beschleunigt wird [und kann sich tatsächlich verzögern, wenn der Aufwand für die Überprüfung, ob die Aufgabe erledigt ist, CPU-Ressourcen belegt, die andernfalls verbraucht werden könnten tun die Aufgabe].

  • Die Anwendung zeichnet die Anzeige übermäßig häufig neu. Die Definition von "übermäßig häufig" hängt in gewissem Maße von der Art des Anzeigegeräts und dem angezeigten Inhalt ab. Wenn die Anzeigehardware 120 fps anzeigen kann, kann es vorkommen, dass Animationen mit 120 fps angezeigt werden, ohne dass Bewegungsunschärfe hinzugefügt wird. Bei niedrigeren Bildraten können sie jedoch nicht sauber angezeigt werden, ohne sie hinzuzufügen. Wenn das Rendern eines Frames mit Bewegungsunschärfe viel länger dauern würde als das Rendern ohne, dann könnte das Rendern mit 120 fps auf Hardware, die dies unterstützt, nicht teurer sein als das Rendern mit einer langsameren Bildrate mit Bewegungsunschärfe. [Einfache Situation: Ein Rad mit 29 Speichen, das sich mit einer Umdrehung pro Sekunde dreht. Bei 120 fps scheint sich das Rad mit der richtigen Geschwindigkeit und Richtung zu drehen. bei 60 fps scheint sich ein flackerndes Rad langsam in die entgegengesetzte Richtung zu drehen].

Ersteres ist eindeutig als schlecht erkennbar. Der zweite ist etwas subtiler. Wenn man auf eine mobile Plattform abzielt, kann es in einigen Fällen wünschenswert sein, Benutzern die Auswahl der gewünschten Animationsbildrate zu ermöglichen, da einige Benutzer sich möglicherweise keine Sorgen über die Akkulaufzeit machen, aber die beste Animationsqualität wünschen, während andere eine geringere Qualität akzeptieren Animation im Austausch für eine bessere Akkulaufzeit. Anstatt die Anwendung versuchen zu lassen, zu erraten, wo der Kompromiss liegen sollte, kann es hilfreich sein, den Benutzer ihn anpassen zu lassen.

15
supercat

"moderne CPUs sind billig und werden bei 100% CPU schnell abgebaut".

Ich glaube nicht, dass irgendjemand den "degradierten" Teil dieser Frage angesprochen hat. ICs verschlechtern sich, wenn die Düsentemperatur die Herstellergrenzen überschreitet. ICs sind normalerweise für den Betrieb bis zu 125 ° C ausgelegt, obwohl jede Erhöhung um 10 ° C verkürzt die Lebensdauer um 50%

Prozessoren hatten nicht immer eine Wärmeregulierung. Dann hatten einige AMD Durons Probleme (angeblich war es möglich, eines zu zerstören, wenn es ohne Kühlkörper betrieben wurde). Jetzt verfügen alle PC-Prozessoren über integrierte Temperatursensoren, die in die CPU-Uhr zurückgeführt werden, und verlangsamen die Uhr, um Schäden zu vermeiden. Möglicherweise stellen Sie fest, dass Ihr Programm 100% der verfügbaren CPU verwendet, die CPU jedoch nur mit 75% ihrer Nenndrehzahl läuft, da die Kühlung unzureichend ist.

Innerhalb eines Benutzerprogramms ist nicht der richtige Ort, um zu versuchen, den CPU-Verbrauch zu verwalten. Im Allgemeinen sollte Ihr Programm abwechselnd so schnell wie möglich arbeiten und auf Eingabe oder Datenträgerzugriff warten. Wenn möglich, sollten Sie das Warten und Spinlocking vermeiden, jedoch aus Höflichkeit gegenüber dem Rest des Systems.

Sowohl Windows als auch Linux verfügen über CPU- "Govenor" -Systeme, die Leistung und Wärmemanagement übernehmen. Da dies auf Betriebssystemebene erfolgt, kann der gesamte CPU-Verbrauch des Systems berücksichtigt werden. Es liegt in der Verantwortung des Betriebssystems, die Hardware zu verwalten und zu verhindern, dass Benutzerprogramme sie missbrauchen. Es liegt in der Verantwortung der Hardware Eigentümer, die Lüfter sauber und funktionsfähig zu halten, und des Herstellers, überhaupt geeignete Kühlkörper und Lüfter einzubauen.

Es gibt einige Fälle, in denen Geräte nicht ausreichend gekühlt werden, aber eine Flut von Rückgaben lehrt die Hersteller, dies nicht zu tun.

10
pjc50

"..moderne CPUs sind billig und werden bei 100% CPU schnell abgebaut".

Sie müssen sich überhaupt nicht um "CPU-Verschlechterung" kümmern. Moderne CPUs sind nicht von geringerer Qualität als früher.

Es ist sehr teuer (und wird alle paar Jahre teurer), CPUs herzustellen, einige Milliarden, um eine neue Fabrik zu bauen, sind keine Seltenheit (siehe Link).

http://en.wikipedia.org/wiki/Semiconductor_fabrication_plant

Die Produktionskosten einer CPU hängen höchstens von der Nr. von produzierten Einheiten. Dies ist eine bekannte Tatsache in der Wirtschaft. Das ist der Grund, warum sie doch (relativ) "billig" verkauft werden können. (Ich denke, hier ist kein Link notwendig)

Ich kann eine Reihe von Gründen auflisten, warum ich moderne CPUs für qualitativ hochwertiger halte als früher.

Aber nur das Wichtigste: Vorteile beim Testen. Moderne Elektronik ist "für den Test konzipiert". Ob Software oder Hardware, die umfassende Einsicht, Tests über fast alles andere zu bewerten, ist nicht so alt. Für CPUs werden die Tests sogar durchgeführt, um die verschiedenen Preis- und Frequenztypen zu bilden, z. Die besten CPUs werden mit den höchsten Frequenzen verkauft. Trotzdem können die billigeren Prozessoren sehr oft mit einer höheren Frequenz als verkauft arbeiten - sie sind nur deshalb verkrüppelt, weil der Hersteller einige "High-Level" -Prozessoren mit höheren Preisen verkaufen möchte.

(Andererseits sind heutzutage natürlich mehr Fehler für einen Prozessor mit mehr als 1,5 Milliarden Transistoren möglich als für einige tausend Transistoren eines Prozessors der siebziger Jahre. Dies widerspricht jedoch nicht meiner Antwort IMO. Prozessoren im Allgemeinen neigen dazu, viele bekannte Fehler zu haben, zumindest im Mikrocode, aber dies ist hier nicht Gegenstand.)

Es gibt sogar weitere Gründe, sich keine Sorgen über die CPU-Verschlechterung Ihres Programms zu machen:

  • Der erste Grund ist, dass moderne CPUs ihre Frequenz oder Drossel verringern, wenn sie zu heiß werden.

    Es sollte klar sein, dass wenn Sie die CPU das ganze Jahr über rund um die Uhr zu 100% nutzen, diese normalerweise früher stirbt als eine CPU, die nur jede zweite Woche eine Stunde verwendet wird. Das gilt übrigens auch für Autos. Nur in solchen Fällen würde ich über die CPU-Auslastung nachdenken und möglicherweise selbst schlafen.

  • Der zweite Grund ist, dass es wirklich sehr schwierig ist, ein Programm zu schreiben, das 100% der CPU vom Betriebssystem aus verwendet (z. B. unter Windows). Außerdem haben moderne CPUs (normalerweise) mindestens 2-4 Kerne. Ein traditioneller Algorithmus, der tendenziell 100% einer Single-Core-CPU verwendet, hat jetzt nur noch 50% auf einer Dual-Core-CPU (vereinfacht, aber in realen Szenarien zu sehen).

  • Darüber hinaus hat das Betriebssystem die Kontrolle über die CPU und nicht über Ihr Programm. Wenn es also andere Anwendungen mit gleicher oder höherer Priorität gibt (was die Standardeinstellung ist), erhält Ihr Programm nur so viel CPU wie möglich, die anderen Anwendungen jedoch nicht verhungern. (Natürlich ist dies nur die vereinfachte Theorie, und natürlich ist das Multitasking von Windows, Linux und anderen nicht perfekt, aber insgesamt würde ich das für wahr halten).

"Ich hatte zuvor den Eindruck, dass eine 100% ige CPU-Auslastung für einen intensiven oder langen Betrieb vorzuziehen ist."

Ja, bleib dabei. Wenn Sie beispielsweise auf einen anderen Prozess warten und eine Schleife ausführen, dh nichts tun, ist es nicht schlecht, wenn Sie einige Millisekunden in dieser Schleife Thread.Sleep () ausführen und anderen zusätzliche Zeit geben. Während es für ein gutes Multitasking-Betriebssystem nicht notwendig ist, habe ich einige Probleme damit gelöst, z. für Windows 2000. (Das bedeutet natürlich NICHT, Sleep () zum Beispiel in Berechnungen zu verwenden.

3
Philm

Um den Anwalt des Teufels zu spielen: In gewisser Weise kann ein Programm, das nicht zu 100% ausgelastet ist, zu schlechterem Verschleiß führen: Wenn es nicht auf einen Tastenanschlag wartet, besteht die Möglichkeit, dass es die meiste Zeit auf Festplatten-E/A wartet. Und Scheiben sind (normalerweise) große mechanische Geräte, die mechanischem Verschleiß oder der Gefahr von Stößen/Kreiseleffekten ausgesetzt sind, wenn sie sich bewegen, ganz zu schweigen vom Stromverbrauch.

3

Eine solche Verschlechterung ist theoretisch möglich und wird als " Elektromigration " bezeichnet. Die Elektromigration ist temperaturabhängig und beschleunigt sich mit steigender Temperatur. Ob es sich bei modernen CPUs um ein praktisches Problem handelt, steht zur Debatte. Moderne VLSI-Entwurfspraktiken kompensieren die Elektromigration, und Chips versagen eher aus anderen Gründen.

Die Elektromigration findet zwar auch bei normalen Belastungen und Temperaturen statt, ist jedoch langsam genug, damit ein gut gestalteter Chip entweder weit vor dem Ausfall veraltet ist oder es schlägt zuerst über einen anderen Mechanismus fehl.

Die Elektromigrationsrate hängt von der Chip-Temperatur ab, wobei sich die Lebensdauer für jede (sehr grobe) 10 ° C verdoppelt. Dies ist in der Tat die Grundlage eines Tests namens "HTOL" (Hochtemperatur-Lebensdauer), der misst, wie lange es dauert, bis ein Chip bei beispielsweise 125 ° C stirbt. Ein Chip, der bei 125 ° C läuft, fällt ungefähr 100-mal schneller aus als ein Chip, der bei 55 ° C läuft. Wenn er also für eine Lebensdauer von mindestens 10 Jahren bei 55 ° C ausgelegt ist, kann ein Chip bei 125 ° C innerhalb eines Monats ausfallen. Wenn ein solcher Chip bei einer vernünftigeren Temperatur wie 85 ° C betrieben wird, fällt er immer noch mindestens 5-10x früher aus, als er vorgesehen war.

Natürlich sind CPUs in der Regel für höhere Temperaturen ausgelegt, sodass sie in der Regel jahrelang bei 85 ° C und rund um die Uhr 100% Lastbetrieb halten können. Daher würde ich vorschlagen, dass Sie sich keine Sorgen über die "Abnutzung" der CPU machen und sich nur darum kümmern, ob eine 100% ige Auslastung aus Sicht der Softwareentwicklung angemessen ist.

3
Roman Starkov

Wenn Sie Ihren Code auf Clients ausführen, bedeutet eine 100% ige CPU-Auslastung, dass Clientcomputer in dieser Zeit nur für Aufgaben mit höherer Priorität verwendet werden können. Da die meisten Anwendungen normalerweise mit Standardpriorität ausgeführt werden, bemerken Benutzer, die diese Computer verwenden, das Einfrieren des Computers und können dies auf ihren Computern nicht anders tun. Selbst wenn es sich um kurze Bursts handelt, werden Benutzer, die an etwas arbeiten, dies immer noch bemerken.

Wie andere sagten, waren Sie ziemlich geheim über das Setup, also kann ich nicht sicher sagen. Wenn Ihre Clients jedoch Desktop-Computer sind, sollten Sie sich von einer 100% igen CPU-Auslastung fernhalten. Nicht wegen einer CPU-Verschlechterung, sondern weil es keine gute Form ist, Benutzer während ihrer Arbeit zu stören.

1

Die Situation ist also folgende: Sie haben einen Code, der beispielsweise fünf Stunden lang mit 100% aller CPUs ausgeführt wird, der so weit wie möglich optimiert ist. Dem Besitzer der Maschine geht es gut, wenn die Maschine fünf Stunden lang unbrauchbar ist, und Ihrem Kollegen behauptet, es wäre besser, Ihren Code in 6 Stunden mit 83,33% aller CPUs auszuführen, da der Computer dadurch weniger abgenutzt wird.

Dies hängt vom verwendeten Computer ab. Ich weiß, dass ein Computerhersteller Garantiereparaturen innerhalb der Garantiezeit auf billigen Heimcomputern abgelehnt hat, die in einer wissenschaftlichen Umgebung verwendet wurden, die rund um die Uhr läuft. Sie wollten eindeutig, dass der Kunde seine teureren Server oder "Business" -Computer kauft. Ob sie erfolgreich waren, weiß ich nicht.

Jeder Mac, den ich besitze, hat irgendwann in seinem Leben tagelang Code mit 100% CPU-Auslastung. In einem Fall musste ich das Display ausschalten, weil ich nicht das ursprüngliche Ladegerät für einen Laptop hatte und mit 4 Kernen und Hyper-Threading mehr Strom verbrauchte als das mitgelieferte Ladegerät - also ging der Akku aus und als er erreichte 5 Prozent verlangsamte der Computer die Taktrate, bis der Akku bis zu 10% war! (Bei ausgeschaltetem Display lief es mehrere Tage lang mit voller Geschwindigkeit). In keinem Fall irgendwelche negativen Auswirkungen.

Mit einem gut gestalteten Computer haben Sie also Recht. Mit einem schlecht gestalteten, billigen Computer könnte Ihr Kollege Recht haben. Auf der anderen Seite können Sie die Kosten Ihrer Wartezeit im Vergleich zu den Kosten für den Kauf eines Ersatzcomputers berücksichtigen.

1
gnasher729

Wenn Sie können, machen Sie Ihren Code zu einer Aufgabe mit niedrigerer Priorität und stellen Sie sicher, dass der CPU-schwere Thread von der GUI getrennt ist. Dann haben Sie möglicherweise eine 100% ige Auslastung, aber der Benutzer kann immer noch andere Aufgaben ausführen und reagiert. Eine CPU selbst ist so konzipiert, dass sie eine Weile zu 100% ausgelastet bleibt, da sie sonst nicht freigegeben wird. Solange der Endbenutzer keine ernsthaften und gefährlichen Änderungen an seiner Hardware vorgenommen hat, können Sie nichts beschädigen.

0
raptortech97