Entwickler-Ecke
Windows API - Threads: Priorität, Klasse, Boost...
Andreas Pfau - Mo 03.03.03 17:26
Titel: Threads: Priorität, Klasse, Boost...
Hallo,
wer kann mir das erklären:
- Thread Priorität
- Thread Prioritätsklasse
- Prozess Boost
Was ist was, vor allem der Unterschied zwischen Prioritätsklasse und priorität?
OregonGhost - Di 04.03.03 15:05
Prioritätsklasse ist sozusagen die Priorität des Prozesses. Ein Thread hat außerdem eine relative Priorität. Aus der Prioritätsklasse des Prozesses und der relativen Priorität des Threads entsteht die absolute Priorität des Threads, also die Priorität, die der Scheduler verwendet, um zu gucken, ob der Thread jetzt ran darf.
Ein Priority Boost wird für Threads vollzogen, die beispielsweise in den Vordergrund geholt werden, damit der Benutzer damit auch arbeiten kann, wenn im Hintergrund irgendein Prozess mit höherer Priorität läuft. Dies passiert auch beispielsweise bei Eingaben des Benutzers etc.
Im PSDK unter Base Services -> DLLs, Processes, and Threads -> About Processes and Threads -> Scheduling sind die Artikel "Scheduling Priorities" und "Priority Boosts" zu finden, die das ganze näher erläutern.
Andreas Pfau - Di 04.03.03 16:27
Danke für die Hilfe! :D
Ich habe in meiner Online-Hilfe nix gefunden, nur die Befehle. Also, lass mich zusammenfassen:
- Mit SetPriorityClass() setze ich die Priorität des Prozesses (GetCurrentProcess())
- Mit SetThreadPriority() setze ich die relative Priorität des Threads (GetCurrentThread()), rel. zum Prozess
- Mit SetThreadPriorityBoost() "booste" ich einen Prozess hoch. Das heißt, dass sobald er wieder mal bearbeitet wird, wird er solange nicht abgelöst, bis er den boost wider wegnimmt
- Das gleche gilt für einen Thread
Stimmt das alles???
FD-83 - Di 04.03.03 17:12
Ich würde aber prinzipiell Vorsichtig mit solchen Sachen sein. Man sollte "seinen" Prozess / Thread nur dann höher setzten wenn es wirklich erforderlich ist. Wenn deine Anwendung aktiv ist (also die Anwendung gerade im Vordergrund ist) wird sie von Windows sowieso bevorzugt. Dein Programm wird also nicht viel schneller laufen, wenn du einfach die Priorität höher setzt obwohl sie sowieso gearde aktiv ist.
Du kannst jedoch bestimmen inwiefern Windows die Anwendung bevorzugt wenn sie im hintergrund läuft...
Versteh mich nich falsch, Prozess und Thread Prioritys sind wichtig und sinnvoll, aber idR. bruacht man für "normale" Anwendungen da nichts ändern.
Aber ich weiss ja nicht was du vor hast :)
Gruss Frederik
torstenheinze - Di 04.03.03 18:27
also ich hab mal ein prog gemacht, welches einen string beispiels weise 1.000.000 mal und mehr verschlüsselt. und ich hab fest gestellt, das das mit realtime priorität wirklich schneller geht als im "normal modus"
OregonGhost - Di 04.03.03 20:45
Tja, ein Ändern der Priorität in Echtzeit kann nur dann einen Geschwindigkeitsschub bringen, wenn vorher eine andere Anwendung mindestens die gleiche Priorität hatte. Wie FD-83 bereits erwähnte, wenn deine Anwendung aktiv ist (also einen Priority Boost erhält) und keine andere Anwendung eine höhere dynamische Priorität erhält, kannst du mit Realtime Priority auch nichts mehr ändern, außer dass du das System damit zum Abstürzen bringen kannst.
Generell gilt, über Hoch sollte die Priorität nicht gesetzt werden. Und selbst auf Hoch nur, wenn es wirklich unbedingt erforderlich ist (viele Anwendungen überlassen auch dem Benutzer die Einteilung der Priorität).
torstenheinze - Di 04.03.03 20:52
bei meinen applicationen gab's bis heute keine probs, trotz realtime, und außerdem merkt man den unterschied, wenn ich die prioritäten verwende. und abgestürzt ist bei mir noch nichts.
naja, für die dies stört kann man ja eine funktion einbauen, mit der das proggramm nur im idle modus arbeitet.
halt für die die viieeeeeeeeeel zeit haben :wink:
FD-83 - Di 04.03.03 22:11
@torstenheinze:
Ich weiss ja nicht, was du noch so für Anwendungen geschrieben hast, aber einfach jedes seiner programme auf ne "realtime" Priority zu setzen ist wirklich nicht emopfehlenswert!
Nichtmal der Windows Task Manager lauft auf realtime! Ausserdem: Stell dir mal vor, jedes program würde das machen um möglcihst schnell zu sein. Ruck zuck laufen alle auf realtime und das ist definitiv genauso effektiv wie wenn alle auf niedrig leufen würden :) Dann bringen nämlich die Prioritäten nix mehr :lol:
Wie gesagt, ich weiss nicht wie essentiell deine Programme sind und was es für Gründe gibt sie auf realtime zu stezen, aber einfach so damits schneller is sollte man das nich machen...
Machs doch wie Winamp. Das läuft standardmässig auf Normal lässt sich aber via schieberegler auf jede belibiege Prozesstufe setzen! (Mal abgesehen davon dass man das auch mit jedem Programm via TaskManager machen könnte :P)
Gruss Frederik
torstenheinze - Di 04.03.03 22:15
das mache ich bei normalen programmen nie mit realtime, ich lasse das immer so auf normal.
das wo ich das mal das mit realtime gemacht hab, das war ein verschlüsselungsprogramm. und in diesem fall bewürkt es auch was ca. 20% schneller
Andreas Pfau - Mi 05.03.03 17:35
Ja, ich habe auch schon mal mit Realtime rumgetüftelt. Ich neutze das auch nicht wirklich. Nur in 2 Fällen:
- Wenn ich messen will, wie lange eine Prozedur zum rechnen braucht (was man ja im allgemeinem extrem selten macht)
- Wenn ich OpenGL-Vollbild-anwendungen schreibe. Da muss ja wirklich nix im Hintergrund laufen, und da kann man die Priorität ruhig mal um 1-2 über normal setzen. Oder halt, wenn man multithreading einsetzt, da kann es von großer Bedeutung sein.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!