Załóżmy, że masz kartę „idź do głowy linii” dla sklepu spożywczego. Idziesz do sklepu, wypełniasz swój koszyk, idziesz do kasy i okazuje się, że nikogo nie ma w kolejce. Czy twoja karta pomaga szybciej się wymeldować? Nie.
Priorytety nie wpływają na szybkość przetwarzania, ponieważ proces o wyższym priorytecie nie może działać szybciej ani nawet zużywać więcej czasu procesora ... nie, jeśli jest to jedyna rzecz, która chce używać procesora.
Aby naprawdę o tym mówić, musimy wspomnieć o wątkach. Procesy nie działają w systemie Windows. Działają wątki, które są częściami procesów. (Chociaż jeśli proces ma tylko jeden wątek, rozróżnienie jest dość rozmyte z zewnątrz.)
(Nawiasem mówiąc: terminologia marketingowa, według której procesor ma na przykład „cztery rdzenie i osiem wątków”, wprowadza w błąd. Procesory mają rdzenie, ale procesory nie mają „wątków”. Wątki są częściami procesów. Rdzeń procesora bez włączonego hyperthreadingu można uruchomić jeden wątek; przy włączonym hyperthreadingu rdzeń może uruchamiać dwa wątki, ale procesory nie mają „wątków”.)
Każdy wątek jest zawsze w jednym z kilku stanów planowania. Najczęściej spotykane stany to: Oczekiwanie (* nix nazywa to „zablokowanym”; w obu systemach operacyjnych oznacza to oczekiwanie na We / Wy lub podobne, nie wymaga czasu procesora i nie chce żadnego); Gotowy (chce zużyć czas procesora, ale obecnie nie są dostępne żadne procesory); i bieganie . Tylko działające wątki zajmują czas procesora; tzn. jeśli proces nie ma uruchomionych wątków, zobaczysz, że zużywa zero% czasu procesora w narzędziach takich jak Menedżer zadań.
Wątek może działać tylko na jednym rdzeniu (lub, jeśli włączono hipertekst, „procesorze logicznym”), więc proces może używać tylko tylu rdzeni procesora (LP), ile ma wątków, które w tej chwili chcą uruchomić . (To samo oświadczenie można złożyć o systemie jako całości.)
Większość wątków w większości systemów spędza większość czasu w stanie oczekiwania. (Właśnie dlatego proces bezczynności powinien zajmować ponad 95% czasu procesora, gdy system nic nie robi.) Wyjątkiem byłyby „działające” wątki, takie jak renderowanie wideo lub renderowanie 3d, gry itp. Bardzo niewiele wątków mogą naprawdę używać 100% procesora, ponieważ na ogół muszą pracować nad niektórymi danymi wejściowymi, które muszą gdzieś odczytać, i generalnie generują dane wyjściowe, które trzeba gdzieś zapisać. Z czasem mogą odnosić się do wielu różnych danych w pamięci, co może oznaczać, że muszą poczekać na usunięcie poważnych błędów strony.
Ale wątki wykonujące coś takiego jak renderowanie wideo lub renderowanie obrazów 3D mogą spędzić prawie cały swój czas na „przetwarzaniu” procesora i bardzo mało czekania na operacje wejścia / wyjścia. Takie wątki są często nazywane „obliczeniowymi”, co oznacza, że ich ogólna wydajność jest przede wszystkim ograniczona przez szybkość procesora.
Ustawienie wprowadzone w Menedżerze zadań faktycznie określa „podstawowy priorytet” dla wszystkich wątków w tym procesie. Rzeczywisty lub „bieżący” priorytet wątku może być wyższy (ale nigdy niższy niż podstawa). Więcej o tym za chwilę. Decyzje dotyczące planowania („kto ma uruchomić i na jakim procesorze”) są zawsze podejmowane przy użyciu bieżącego priorytetu wątku. Priorytet ma znaczenie tylko w przypadku gotowych i uruchomionych wątków (inaczej mówiąc, priorytet nie ma znaczenia dla wątków oczekujących).
Windows używa algorytmu planowania zapobiegawczego . Jeśli tylko jeden wątek w systemie chce wykorzystać czas procesora, nie ma najmniejszego znaczenia, jaki jest jego priorytet; dostaje 100% procesora. Nie jest tak, że program planujący „zatrzymuje” część możliwości procesora, gdy działa wątek o niskim priorytecie, na wypadek, gdyby pojawił się coś o wyższym priorytecie.
Jeśli dwa wątki chcą korzystać z procesora i mają ten sam priorytet, są one planowane za pomocą tak zwanego „podziału czasu” iz biegiem czasu każdy otrzymuje około 50% czasu procesora. Natomiast jeśli mają różne priorytety, wątek o wyższym priorytecie dostaje 100%, a niższy nic nie dostaje .
(W praktyce nic nie uzyska, ponieważ będzie podlegał okresowemu „zwiększeniu priorytetu unikania głodu”, co może dać mu kilkadziesiąt milisekund co około 4 lub 5 sekund. Ale to tak naprawdę nie jest wyjątkiem od „wyższego priorytetu” wygrywa ”, ponieważ odbywa się to poprzez dostosowanie priorytetu zagłodzonego wątku).
Jeśli masz więcej niż jeden rdzeń procesora, rzeczy stają się bardziej interesujące, a priorytety generalnie mają mniejszy wpływ. Załóżmy, że masz dwa wątki, które chcesz uruchomić. Załóżmy, że masz dwa lub więcej rdzeni procesora, które nie robią nic innego o takim samym lub wyższym priorytecie niż te wątki. Wtedy twoje dwa wątki otrzymają 100% rdzenia, niezależnie od ich odpowiednich priorytetów .
(Dwie osoby pojawiają się w supermarkecie, a są dwa bezpłatne warcaby. Jeden z klientów ma kartę „idź na szczyt linii”. To nie ma znaczenia).
tl; dr version (do tej pory): Priorytety nie dotyczą „tego, kto dostaje jaki procent czasu procesora”, ale raczej „kto uruchamia się jako pierwszy”.
Nie zamierzam tu zbytnio angażować się w hyperthreading, z wyjątkiem tego, że Windows traktuje każdy z dwóch „logicznych procesorów” w rdzeniu w taki sam sposób, jak traktowałby rdzeń, gdyby HT został wyłączony. tzn. są traktowane jako „prawdziwe” procesory, z tym wyjątkiem: Windows bardzo się stara, aby nie używać więcej niż jednego LP w rdzeniu na raz. tzn. zwykle nie zaczynasz widzieć obu płyt LP w rdzeniu, dopóki nie masz więcej niż liczby rdzeni wątków próbujących uruchomić wszystkie jednocześnie. Wynika to z faktu, że dwa „procesory logiczne” nie zapewniają dwukrotności wydajności pojedynczego rdzenia bez hipertekstu.
O „podstawowym priorytecie”: Windows dostosuje („wzmocni” i „rozpad”) bieżący priorytet wątków w oparciu o to, co zrobili ostatnio. Wątki, które niedawno zakończyły operacje we / wy będą zwykle wycięciem lub dwoma powyżej podstawy; Wątki interfejsu użytkownika (wątki z oknem) często będą znacznie wyższe; Wątki związane z procesorem zwykle znajdują się u podstawy. Ma to na celu utrzymanie responsywności w interfejsie programu, a także utrzymanie przepływu zapytań IO do takich rzeczy jak dyski.
Program (proces) może również zmieniać podstawowy priorytet każdego z jego wątków, w zakresie określonym przez priorytet procesu (ustawienie ustawione w Menedżerze zadań). Ale ogromna większość programów nie przeszkadza. (Więcej powinno.)
Działają się inne rzeczy. Ze względu na priorytetowe przyspieszanie / zanikanie oraz ponieważ systemy wieloprocesorowe (wielordzeniowe, hiperwątkowe lub oba) są obecnie tak powszechne, a ponieważ w systemie Windows zawsze działają rzeczy działające w tle (ale mamy nadzieję, że nie zużywają dużo czasu procesora), a ze względu na skutki zarówno „twardego”, jak i „miękkiego” powinowactwa trudno jest uruchomić przypadki testowe i uzyskać dokładne wyniki, które można by tutaj przewidzieć. Ale to powinno dać ci bliski prawidłowy obraz.
Podsumowując ...
Rozsądne jest pozostawienie większości rzeczy na „normalnym”. Jeśli tego nie zrobisz, możesz łatwo skończyć z głodem coś, co naprawdę chciałbyś mieć (nawet jeśli nie wiesz, że istnieje), na przykład funkcje opróżniania pamięci podręcznej dysku systemu operacyjnego. Rzeczywiście, wiele procesów systemu operacyjnego będzie przebiegać inaczej niż normalnie i należy je pozostawić w dowolnym miejscu systemu Windows.
Rozsądnym przykładem użycia Menedżera zadań do majstrowania przy priorytetach jest to, że masz jakieś zadanie polegające na zawieszeniu procesora (takie jak renderowanie wideo lub 3D) i spowalnia to korzystanie z systemu podczas jego działania. Właściwe jest, wierz lub nie, obniżenie priorytetu o jeden lub dwa stopnie. Z przyjemnością wykorzysta wszystkie cykle procesora, których nic więcej nie chce, ale będzie przeszkadzał w interaktywnym korzystaniu z systemu. Wykonanie pracy może potrwać nieco dłużej, ale wykona swoją pracę przy minimalnym zakłóceniu korzystania z innych programów. Jeśli nie podoba ci się ten kompromis, nie rób tego! Ale nadaj mu wysoki priorytet, próbując „przyspieszyć” i może zawiesić cały interfejs użytkownika, dopóki nie zostanie ukończony.
Nigdy nie ustawiaj niczego w tak zwanej klasie priorytetów czasu rzeczywistego.
(Edytuj - dodano ten akapit) Ok, to ekstremalne stwierdzenie. („Żadne uniwersalne twierdzenie nie jest prawdziwe - nie wyłączając tego.”) Przynajmniej nie bez bardzo uważnego rozważenia. Jeśli Twoim celem jest przyspieszenie działania, prawdopodobnie nie pomoże. Ale może „mocno zablokować” system (wymagający resetu lub w przypadku większości nowoczesnych maszyn, wymaga cyklu zasilania). Lub spraw, aby nie reagował tak dobrze, że równie dobrze mógłby zostać zablokowany.
Uwaga: Każda aplikacja odtwarzacza wideo powinna korzystać z funkcji „Planowanie klas multimediów” w systemie Vista i nowszych. Daje to automatycznie do 80% procesora, liczonego w stosunkowo krótkich odstępach czasu. Jeśli nie możesz uzyskać przy tym bezproblemowego odtwarzania, coś jest bardzo nie tak.
Aby uzyskać więcej informacji, zobacz rozdziały dotyczące wątków i planowania w Windows Wewnętrzne wydanie 6 autorstwa Solomona, Russinovicha i Ionescu.
Zobacz także moją odpowiedź tutaj, aby uzyskać informacje na temat ustawiania priorytetów procesu i wątku oraz znaczenia kolumny „Priorytet” w Menedżerze zadań.
When should I set [priorities in Task Manager]?
prawie nigdy.