Jak działają priorytety w menedżerze zadań i kiedy powinienem / nie powinienem tego ustawiać?

30

Ustaliłem priorytet niektórych procesów, aby zobaczyć, co się właściwie dzieje, ale zgadnij, co ... Nic; wszystko działa tak samo ...

Odkryłem w Google, że priorytety nie są tak naprawdę powiązane z szybkością przetwarzania, czy to prawda? Dlaczego nie jeśli proces ma najwyższy priorytet, czy nie powinien przebiegać szybciej?

Pablito
źródło
4
Krótka odpowiedź: When should I set [priorities in Task Manager]? prawie nigdy.
Dan Henderson
2
Inną ważną rzeczą do zrozumienia jest to, że egzekwowanie priorytetów zmniejsza całkowitą ilość pracy, jaką system może wykonać. Właśnie dlatego popularne systemy operacyjne dla komputerów stacjonarnych nie są systemami operacyjnymi czasu rzeczywistego. Im bardziej sprawi, że będą się zachowywać jak systemy operacyjne w czasie rzeczywistym, tym mniej będą wydajne. Przerwy, na przykład, niszczą skrzynki. Prace o niższym priorytecie wciąż muszą zostać wykonane i nadal konkurują o wejścia / wyjścia. Robienie mniej wydajnie, w mniejszych porcjach, nie przynosi korzyści nikomu.
David Schwartz
Nie próbuj myśleć o swoim komputerze. Nie wygrasz. Wie, jak radzić sobie z wątkami znacznie lepiej niż ty.
b1nary.atr0phy

Odpowiedzi:

52

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ń.

Jamie Hanrahan
źródło
1
Nawiasem mówiąc, moja odpowiedź na następujące powiązane pytanie jest związana: superuser.com/questions/949030/...
Jamie Hanrahan
1
Nawiasem mówiąc: „Planowanie”, „harmonogram” itd. Odnoszą się tutaj do procedur jądra systemu Windows, które decydują, które wątki mają zostać uruchomione i na których procesorach powinny one działać. Nie do „planowania zadań”, które dotyczą uruchamiania procesów w określonych momentach lub w odpowiedzi na różne wyzwalacze.
Jamie Hanrahan,
@JamieHanrahan ok Przeniosłem go tutaj: superuser.com/questions/1380473/…
Julien__
5

Zmiana priorytetów zmienia sposób, w jaki system operacyjny przydziela czas procesora działającym aplikacjom. Daje zauważalne efekty tylko wtedy, gdy ogólne wykorzystanie procesora jest wysokie.

Na przykład kodujesz wideo i oglądasz inne wideo w tym samym czasie. Prawdopodobnie aplikacja do kodowania wykorzysta 100% mocy obliczeniowej na wszystkich rdzeniach procesora. W rezultacie inne aplikacje mogą się zacinać.

Windows domyślnie przyznaje obu aplikacjom równy „normalny” priorytet. W tym momencie możesz podnieść priorytet oprogramowania odtwarzacza filmów. W ten sposób będziesz mieć płynne odtwarzanie wideo kosztem wolniejszego kodowania wideo, ponieważ oprogramowanie do kodowania zostanie zdegradowane do procesu w tle w porównaniu do odtwarzacza wideo.

Benjamin Hastings
źródło
„Prawdopodobnie aplikacja do kodowania wykorzysta 100% mocy obliczeniowej na wszystkich rdzeniach procesora.” Jest to możliwe tylko wtedy, gdy istnieje co najmniej liczba wątków kodujących wątek.
Jamie Hanrahan,