Wie funktionieren Prioritäten im Task-Manager und wann sollte ich dies nicht einstellen?

13832
Pablito

Ich habe einigen Prozessen Priorität eingeräumt, um zu sehen, was tatsächlich passiert, aber raten Sie mal was ... Nichts; es läuft alles genauso ...

Bei Google habe ich festgestellt, dass Prioritäten nicht wirklich mit der Verarbeitungsgeschwindigkeit verknüpft sind. Stimmt das? Warum dann nicht Wenn ein Prozess die höchste Priorität hat, sollte er nicht schneller gehen?

26
Würden Sie erklären, warum Sie, wie viele andere, erwarten, dass "Priorität" etwas mit Geschwindigkeit zu tun hat? Ich bin überrascht, dass es für so viele Menschen so wenig eingängig ist. Wenn die Ampeln an einer Kreuzung "grün" sind, bedeutet das, dass sich Ihr Auto plötzlich schneller bewegt? Wenn Sie in einem Flugzeug "Priorität" bekommen, bedeutet das, dass sich das Flugzeug für Sie schneller bewegt? Wenn Sie die Priorität einer Aufgabe auf Ihrer To-Do-Liste erhöhen, erwarten Sie, dass die Aufgabe plötzlich kürzer wird ?! Ich habe nie verstanden, welche Argumentation die Leute dazu bringt, diese Frage zu stellen! Mehrdad vor 8 Jahren 6
Einfach ... Ich habe versucht, diese Funktion während zu langer Zeit mit dem Prozess zu verwenden, da ich dachte, sie benötigen mehr CPU-Zeit. Ich denke, ich dachte, es wäre schneller, das Land zu durchqueren, wenn die Straße Ihnen gehört, als wenn Sie es mit allen teilen müssen ... Wie ein Ambulace: D @mehrdad Pablito vor 8 Jahren 2
Okay, aber selbst im Fall eines Rettungswagens müssen andere Personen Ihrer Spur * im Weg stehen, um einen Unterschied zu erkennen. Haben Sie zum Vergleich andere Programme *, die tatsächlich * im Hintergrund laufen, wenn Sie die Priorität Ihres Programms ändern? Und verwenden sie eine der "Spuren" (analog, CPUs / Festplatten / etc.), Die Ihr Programm benötigt? Wenn ja, dann sollten Sie einen Geschwindigkeitsunterschied sehen. Wenn nicht, warum würden Sie dann damit rechnen? Mehrdad vor 8 Jahren 4
Kurze Antwort: `Wann sollte ich [Prioritäten im Task-Manager] einstellen?` ** Fast nie. ** Dan Henderson vor 8 Jahren 4
Es ist außerdem wichtig zu verstehen, dass die Durchsetzung von Prioritäten die Gesamtarbeit reduziert, die das System leisten kann. Aus diesem Grund sind gängige Desktop-Betriebssysteme keine Echtzeitbetriebssysteme. Und je mehr sie sich wie Echtzeitbetriebssysteme verhalten, desto weniger effizient sind sie. Unterbrechungen zum Beispiel blasen Caches aus. Die Arbeit mit niedrigerer Priorität muss noch erledigt werden und konkurriert immer noch um E / A. Weniger effizient zu sein, in kleineren Brocken, nützt niemandem. David Schwartz vor 8 Jahren 2
Versuchen Sie nicht, für Ihren Computer zu denken. Du wirst nicht gewinnen. Es versteht es, seine Threads weitaus besser zu handhaben als Sie. b1nary.atr0phy vor 7 Jahren 0

2 Antworten auf die Frage

46
Jamie Hanrahan

Angenommen, Sie haben eine Karte für den Lebensmittelladen. Sie gehen in den Laden, füllen Ihren Einkaufswagen, gehen zur Kasse und finden heraus, dass niemand in der Reihe ist. Hilft Ihnen Ihre Karte, schneller ausgecheckt zu werden? Nee.

Prioritäten wirken sich nicht auf die Verarbeitungsgeschwindigkeit aus, da ein Prozess mit höherer Priorität nicht schneller ausgeführt werden kann oder sogar mehr CPU-Zeit beansprucht ... nicht, wenn es die einzige Sache ist, die die CPU verwenden möchte.

Um wirklich darüber zu sprechen, müssen wir Threads erwähnen. Prozesse werden in Windows nicht "ausgeführt". Threads, die Teil von Prozessen sind, laufen ab. (Obwohl ein Prozess nur einen Thread hat, ist der Unterschied von außen ziemlich unscharf.)

Jeder Thread befindet sich immer in einem von mehreren Planungsstatus. Die am häufigsten beobachteten Zustände sind: Warten (* nix nennt dies "blockiert"; in beiden Betriebssystemen bedeutet dies das Warten auf E / A oder ähnliches, verwendet keine CPU-Zeit und möchte keine); Bereit (möchte CPU-Zeit verwenden, aber momentan sind keine CPUs verfügbar); und läuft. Nur laufende Threads verbrauchen CPU-Zeit. Wenn für einen Prozess keine Laufenden Threads vorhanden sind, wird in Tools wie dem Task-Manager eine CPU-Zeit von null Prozent verwendet.

Ein Thread kann jeweils nur auf einem Kern (oder, sofern Hyperthreading aktiviert ist, "logischer Prozessor") ausgeführt werden. Daher kann ein Prozess nur so viele CPU-Kerne (oder LPs) verwenden, wie Threads derzeit ausgeführt werden sollen . (Dieselbe Aussage kann für das gesamte System getroffen werden.)

Die meisten Threads auf den meisten Systemen verbringen die meiste Zeit im Wartezustand. Ausnahmen sind die "funktionierenden" Threads von Dingen wie Video- oder 3D-Rendering, Spielen usw.

Die Einstellung, die Sie im Task-Manager vornehmen, legt tatsächlich die "Basispriorität" für alle Threads im Prozess fest. Die tatsächliche oder aktuelle Priorität des Threads kann höher sein (aber niemals niedriger als die Basis). Mehr dazu gleich. Planungsentscheidungen ("wer läuft und auf welcher CPU") werden immer mit der aktuellen Priorität des Threads durchgeführt. Priorität ist nur für Ready- und Running-Threads von Bedeutung (dh für Waiting-Threads ist dies nicht von Bedeutung).

Windows verwendet einen vorbeugenden Planungsalgorithmus. Wenn nur ein Thread im System die CPU-Zeit verwenden möchte, spielt es keine Rolle, welche Priorität er hat. es erhält 100% der CPU. Es ist nicht so, als ob der Scheduler einen Teil der CPU-Kapazität "zurückhält", wenn ein Thread mit niedriger Priorität läuft, nur für den Fall, dass etwas von höherer Priorität auftritt.

Wenn zwei Threads eine CPU verwenden möchten und sie die gleiche Priorität haben, werden sie über das so genannte "Time-Slicing" eingeplant, und im Laufe der Zeit erhalten sie jeweils etwa 50% der CPU-Zeit. Wenn sie jedoch unterschiedliche Prioritäten haben, erhält der Thread mit der höheren Priorität 100% und der niedrigere - nichts .

(In der Praxis wird es nicht ganz zu nichts kommen, da es eine periodische Erhöhung der Priorität "Verhinderung der Verhungerung") erlebt, die es alle 4 oder 5 Sekunden um einige zehn Millisekunden gibt. Dies ist jedoch keine Ausnahme von "höherer Priorität" gewinnt ", weil dies durch Anpassen der Priorität des verhungerten Threads erfolgt.)

Wenn Sie mehr als einen CPU-Kern haben, werden die Dinge interessanter und Prioritäten haben im Allgemeinen weniger Wirkung. Angenommen, Sie haben zwei Threads, die ausgeführt werden sollen. Angenommen, Sie haben zwei oder mehr CPU-Kerne, die nichts anderes als diese Threads mit gleicher oder höherer Priorität ausführen. Dann erhalten Ihre zwei Threads unabhängig von ihren jeweiligen Prioritäten jeweils 100% eines Kerns .

(Zwei Leute tauchen im Supermarkt auf, und es gibt zwei Checkers frei. Einer der Kunden hat eine Karte "Direkt an der Spitze der Linie". Ist egal.)

tl; dr-version (bisher): Bei den Prioritäten geht es nicht um "wer bekommt welchen Anteil an CPU-Zeit", sondern "wer zuerst läuft".

Ich werde mich hier nicht besonders mit Hyperthreading beschäftigen, außer zu sagen, dass Windows jeden der beiden "logischen Prozessoren" in einem Core auf die gleiche Weise behandelt, wie er einen Core behandeln würde, wenn HT deaktiviert wäre. Das heißt, sie werden als "echte" CPUs behandelt, mit dieser Ausnahme: Windows wird sich sehr bemühen, nicht mehr als eine LP gleichzeitig in einem Core zu verwenden. Das heißt, Sie sehen normalerweise nicht beide LPs in einem Core, die verwendet werden, bis Sie mehr als Anzahl der Cores- Threads haben, die versuchen, alle gleichzeitig auszuführen. Dies liegt daran, dass die beiden "logischen Prozessoren" nicht die doppelte Leistung eines einzelnen Kerns ohne Hyperthreading bieten.

Über die "Basispriorität": Windows passt die aktuelle Priorität von Threads an ("Boost" und "Decay"), basierend auf dem, was sie kürzlich getan haben. Threads, die kürzlich E / A-Vorgänge abgeschlossen haben, befinden sich normalerweise ein oder zwei Punkte oberhalb der Basis. UI-Threads (Threads, die ein Fenster ausführen) sind oft erheblich höher. CPU-gebundene Threads befinden sich normalerweise an ihrer Basis. Dies dient dazu, die Reaktionsfähigkeit in der Benutzeroberfläche des Programms aufrechtzuerhalten und auch E / A-Anforderungen für Festplatten wie Festplatten bereitzustellen.

Ein Programm (Prozess) kann auch die Basispriorität jedes Threads ändern, und zwar innerhalb eines Bereichs, der durch die Priorität des Prozesses bestimmt wird (die Aufgabe wird im Task-Manager festgelegt). Aber die große Mehrheit der Programme stört nicht. (Mehr von ihnen sollte.)

Es sind andere Dinge im Gange. Aufgrund von Prioritäts-Boost / Decay und weil Multiprocessing-Systeme (entweder Multicore, Hyperthreading oder beide) heutzutage so üblich sind und weil in Windows immer etwas im Hintergrund läuft (wir hoffen jedoch, dass nicht viel CPU-Zeit benötigt wird), Aufgrund der Auswirkungen sowohl der harten als auch der weichen "Affinität" ist es schwierig, Testfälle auszuführen und die genauen Ergebnisse zu erhalten, die hier vorhergesagt werden würden. Aber dies sollte Ihnen ein korrektes Bild nahe bringen.

Abschließend...

Es ist sinnvoll, die meisten Dinge auf "Normal" zu belassen. Andernfalls kann es leicht passieren, dass Sie etwas verhungern, das Sie wirklich gerne hätten (auch wenn Sie möglicherweise nicht wissen, dass es existiert), wie beispielsweise die Festplatten-Cache-Speicherfunktionen des Betriebssystems. In der Tat werden viele Prozesse des Betriebssystems nicht Normal sein, und sie sollten dort bleiben, wo Windows sie installiert hat.

Ein vernünftiger Fall für die Verwendung des Task-Managers zum Fummeln mit Prioritäten ist, wenn Sie einige CPU-Hogging-Aufgaben (wie Video- oder 3D-Rendering) haben und die Verwendung des Systems während der Ausführung verlangsamt. Das Richtige ist, ob Sie es glauben oder nicht, seine Priorität um ein oder zwei Stufen zu senken . Es verwendet alle CPU-Zyklen, die nichts anderes will, als die interaktive Nutzung des Systems. Es kann etwas länger dauern, bis die Arbeit erledigt ist, aber die Arbeit wird mit minimaler Beeinflussung der interaktiven Verwendung anderer Programme erledigt. Wenn Sie diesen Kompromiss nicht mögen, tun Sie es nicht! Setzen Sie jedoch eine hohe Priorität in einem Versuch, "um es schneller zu machen" und es kann Ihre gesamte Benutzeroberfläche hängen lassen, bis es fertig ist.

Stellen Sie niemals etwas auf die sogenannte Echtzeit-Prioritätsklasse ein.

Hinweis: Jede Video-Player-App sollte sich für die Funktion "Multimedia-Klassenplanung" in Vista und höher entscheiden. Dies gibt automatisch bis zu 80% einer CPU an, gerechnet in relativ kurzen Intervallen. Wenn Sie keine störungsfreie Wiedergabe damit machen können, ist etwas sehr falsch.

Weitere Informationen finden Sie in den Kapiteln zu Threads und zur Planung in Windows Internals 6th Edition von Solomon, Russinovich und Ionescu.

Siehe auch meine Antwort hier für Informationen darüber, wie Prozess- und Thread-Prioritäten festgelegt werden, und die Bedeutung der Spalte "Priorität" im Task-Manager.

Übrigens, meine Antwort auf die folgende verknüpfte Frage ist verwandt: http://superuser.com/questions/949030/is-there-a-way-to-hack-windows-10-to-use-its-entire -cpu-power-in-one-task-or-p / 949048 # 949048 Jamie Hanrahan vor 8 Jahren 1
Übrigens: "Scheduling", "Scheduler" usw. beziehen sich hier auf die Windows-Kernel-Routinen, die entscheiden, welche Threads laufen sollen und auf welchen CPUs sie laufen sollen. Nicht zu "Task Scheduling", bei dem Prozesse zu bestimmten Zeitpunkten oder als Reaktion auf verschiedene Auslöser gestartet werden. Jamie Hanrahan vor 8 Jahren 1
Eine Belohnung wert Ich habe etwas gelernt nixda vor 8 Jahren 0
Vielen Dank! (Und wenn dies Fragen aufwirft, zögern Sie nicht zu fragen.) Jamie Hanrahan vor 8 Jahren 0
5
Benjamin Hastings

Das Ändern von Prioritäten ändert die Art und Weise, in der das Betriebssystem den laufenden Anwendungen CPU-Zeit zuordnet. Sie bewirkt nur dann eine spürbare Wirkung, wenn die CPU-Auslastung insgesamt hoch ist.

Beispielsweise verschlüsseln Sie ein Video und schauen gleichzeitig ein anderes Video an. Wahrscheinlich nutzt die Kodierungsanwendung 100% Rechenleistung für alle Ihre CPU-Kerne. Infolgedessen können andere Anwendungen stottern.

Windows gibt beiden Anwendungen standardmäßig die gleiche "normale" Priorität. An dieser Stelle möchten Sie möglicherweise die Priorität Ihrer Movie-Player-Software erhöhen. Auf diese Weise erhalten Sie eine reibungslose Videowiedergabe auf Kosten einer langsameren Videokodierung, da die Kodierungssoftware im Vergleich zum Videoplayer zu einem Hintergrundprozess degradiert wird.

_ "Die Codierungsanwendung verwendet wahrscheinlich 100% Rechenleistung für alle Ihre CPU-Kerne." _ Dies ist nur möglich, wenn mindestens _number-of-cores_-Codierungsthreads vorhanden sind. Jamie Hanrahan vor 6 Jahren 0