Mam 2 aplikacje, które wykorzystują dużo zasobów systemowych. Kiedy zmniejszam priorytet jednego w Menedżerze zadań, jednocześnie zwiększając drugi, nie zauważam żadnej znaczącej poprawy prędkości w aplikacji o wyższym priorytecie.
Dlaczego to? Czy dzieje się coś więcej, czy jest jeszcze coś do zrobienia?
task-manager
priority
Mojżesz
źródło
źródło
Odpowiedzi:
Priorytet nie pomaga, gdy wąskim gardłem jest sam procesor. Rzeczywisty priorytet ma wpływ na algorytm planowania używany przez system operacyjny do określania, który proces zostanie uruchomiony w następnej kolejności, ponieważ w większości systemów nie ma wystarczającej liczby procesorów do ciągłego uruchamiania każdego procesu.
Zadanie o wyższym priorytecie szybciej dotrze na szczyt kolejki, więc pomaga to z ogólnym opóźnieniem, ale jeśli proces wyczerpuje cały przedział czasu, jest on przydzielany na faktyczne obliczenia, to harmonogram niczego tam nie zmieni. Zmiana priorytetu jest bardziej przydatna, gdy masz proces oczekujący na operacje we / wy i chcesz, aby był bardziej responsywny.
źródło
Priorytetem jest czas pracy procesora. Czy wszystkie rdzenie są wykorzystywane w 100% przez cały czas? Jeśli nie, priorytet nie będzie miał wpływu. Dość często procesor nie stanowi wąskiego gardła, a jego zasoby pamięci, dysku lub GPU.
źródło
Priorytet ma znaczenie tylko wtedy, gdy jest więcej wątków wykonalnych niż dostępne rdzenie procesora. Kiedy tak się dzieje, priorytet kontroluje, które wątki mają zostać uruchomione. W większości systemów nie ma wystarczającej liczby obliczeń, aby można było rywalizować z procesorem: wszystkie wątki są blokowane , czekając na coś. Może to oznaczać, że coś napiszesz, poruszysz myszą, dotkniesz ekranu lub dane dotrą z dysku, sieci, innego podłączonego urządzenia lub inny wątek zakończy pracę na danych krytycznych Struktura. Być może program czeka na odczyt z dysku lub część pamięci, która została zamieniona na odczyt, zamiast jawnego odczytu pliku.
W systemie Windows, harmonogram utrzymuje kolejkę przypisanymi wątków na każdym poziomie priorytetu. Kiedy podejmuje decyzję dotyczącą harmonogramu - albo wątek wyczerpał swoje kwantowe (dozwolony czas, zanim coś innego musi się uruchomić), co oznacza, że kolejny wątek powinien otrzymać zwrot, wątek został zablokowany i nie można go już uruchomić, lub ma wyższy priorytet wątek został odblokowany - zaplanowany zostanie następny wątek w kolejce na najwyższym poziomie priorytetu z dowolnymi działającymi wątkami. Jeśli działający wątek zużył swój kwant, jest on umieszczany na końcu kolejki. Jeśli jest to jedyny wątek na poziomie priorytetu, który można uruchomić, i nie ma innych wątków o wyższym priorytecie, ale nie działających, wątki otrzymają kolejną turę.
W systemach wielordzeniowych / wieloprocesorowych mogą obowiązywać ograniczenia dotyczące rdzeni, na których może działać wątek. Ponadto system stara się utrzymywać wątki na swoim idealnym rdzeniu i w węźle NUMA, aby dane wątku nadal mogły znajdować się w pamięci podręcznej tego rdzenia i mieć szybki dostęp do danych, które utworzył. Wątki będą nadal uruchamiane na nie idealnych rdzeniach, jeśli nie będzie wyboru, co dalej.
System wykorzystuje różne dynamiczne podbicia priorytetów i dynamiczne rozmiary kwantów, dzięki czemu aplikacja na pierwszym planie ma więcej czasu (jeśli tego potrzebuje) niż procesy w tle, a procesy mogą szybko reagować po zakończeniu operacji we / wy (w tym myszy, klawiatury i wprowadzanie za pomocą ekranu dotykowego). Ponadto zwiększanie priorytetów służy do obejścia inwersji priorytetów, w których wątek o wysokim priorytecie czeka na zasób, który obecnie przechowuje wątek o niskim priorytecie. Jeśli działa także wątek o średnim priorytecie, spowoduje to zagłębienie wątku o niskim priorytecie czasu procesora, podtrzymując wątek o wysokim priorytecie. Tak więc wątek o niskim priorytecie jest tymczasowo zwiększany do wyższego priorytetu, dzięki czemu zyskuje czas i, miejmy nadzieję, uwalnia zasoby, których potrzebuje wątek o wysokim priorytecie.
Przed Windows Vista priorytet wątku nie miał wpływu na szybkość operacji we / wy. Od systemu Windows Vista operacje wejścia / wyjścia mogą mieć również priorytet, który domyślnie pochodzi z priorytetu wątku.
Podsumowanie: w dużej mierze nie zobaczysz efektu zmiany priorytetów wątków, chyba że procesor jest mocno obciążony, a nawet wtedy efekt będzie zwykle minimalny. Jeśli proces musi czekać na operacje we / wy lub nie rywalizuje z innymi procesami o czas procesora, działa już najszybciej, jak to możliwe, a zmiana priorytetu nie przyspieszy.
źródło
Ogólnie rzecz biorąc, dodatkowy wysiłek wymaga, aby program używał więcej niż jednego procesora (przez dodanie wielowątkowości). Więc nawet jeśli program ma najwyższy dostępny priorytet, może używać tylko jednego rdzenia.
Inne możliwe problemy:
źródło
Nawet zwiększenie priorytetu I / O procesu związanego z I / O niekoniecznie spowoduje, że będzie on działał szybciej. Na przykład, jeśli jest konsumentem danych wytworzonych przez oddzielny, być może zdalny proces, i nadąża za szybkością, z jaką dane źródło wytwarza dane, to nie może jechać szybciej ani mieć większej przepustowości.
W przeciwieństwie do tego, co kategorycznie stwierdzono w pierwszym zdaniu obecnie akceptowanej odpowiedzi ( /superuser//a/752587/322588 ), zmiany priorytetów są najbardziej skuteczne, gdy procesor stanowi wąskie gardło, jak wyjaśniono w odpowiedzi Mike'a Dimmicka ( /superuser//a/752864/322588 ). Co więcej, stwierdzenie w drugim akapicie przyjętej odpowiedzi „jeśli twój proces wyczerpuje cały przedział czasu, który jest przydzielany na faktyczne obliczenia, wówczas planowanie niczego tam nie zmieni” jest całkowicie błędny, chyba że proces ma ogólnie najwyższy priorytet ze wszystkich uruchamialne wątki, ilekroć oczekuje na uruchomienie. Wynika to z faktu, że we wszystkich innych okolicznościach podniesienie priorytetu spowoduje zwiększenie liczby przedziałów czasowych na interwał zegara ściennego.
Mike Dimmick zwrócił uwagę na problemy z tą odpowiedzią kilka dni temu i udzielił znacznie lepszej odpowiedzi, ale pierwsza w niewytłumaczalny sposób nadal zdobywa głosy. Twierdzenie autora, że on tylko głupi swoją odpowiedź dla nas, manekinów, nie jest wiarygodne, ponieważ nie jest to po prostu proste, a nawet uproszczone, jest całkowicie błędne, przynajmniej w odniesieniu do procesów związanych z procesorem.
Oświadczenie: Nie znam pana Dimmicka, choć mogę powiedzieć, że wie, o czym pisze.
źródło
timeBeginPeriod (...)
, co robi już wszystko interaktywne. Gra zazwyczaj ustawia to na 1, gdy się rozpocznie, i to stosuje interwał planowania 1 ms na całej planszy do wszystkiego, co działa w systemie. Nie jest odizolowany od samego procesu, który to zrobił. Jest to jeden z powodów, dla których ciężko jest brać system Windows na poważnie za wielozadaniowość.