Ustaw priorytet procesu na Wysoki: Niebezpieczny?

8

Przeczytałem, że ustawienie czegoś w czasie rzeczywistym jest dużym nie-nie, więc nie zamierzam tego robić. Ale mam aplikację, którą muszę upewnić się, że zawsze ma najwyższy priorytet w moim systemie, ponieważ ma ona kluczowe znaczenie dla pozostałych aplikacji, które uruchamiam. Czy istnieje jakieś niebezpieczeństwo przy ustawianiu priorytetu na wysoki, czyli o jeden poziom poniżej czasu rzeczywistego?

W jaki sposób mógłbym to zrobić, zmieniając cel skrótu? Jakie jest polecenie?

eek
źródło
Ustawienie „Powyżej normalnego” (Windows 7) jest bezpieczniejsze. Trochę dyskusji tutaj ... stackoverflow.com/questions/1663993/…
Moab
1
To jest bardzo niebezpieczne. Głównym problemem jest odwrócenie priorytetu, które powoduje, że proces o wyższym priorytecie faktycznie uzyskuje efektywnie niższy priorytet, ponieważ może zostać na czas nieokreślony zablokowany przez proces o niższym priorytecie .
David Schwartz,
Jak wspomniano, „czas rzeczywisty” niekoniecznie jest zły, pod warunkiem, że proces jest dobrze zachowany i działa tylko wtedy, gdy jest potrzebny, i śpi, gdy nie, w przeciwnym razie może (i będzie) całkowicie uniemożliwiać inne zadania.
Mokubai
2
@David Schwartz, Cutler zaprojektował program planujący Windows, aby uniknąć impasu z powodu inwersji priorytetów. From support.microsoft.com/kb/96418 : „Program planujący Windows NT rozwiązuje ten problem, losowo zwiększając priorytet wątków gotowych do uruchomienia (w tym przypadku blokad o niskim priorytecie). Wątki o niskim priorytecie działają wystarczająco długo zwolnić blokadę (wyjść z sekcji krytycznej), a wątek o wysokim priorytecie odzyskuje blokadę. Jeśli wątek o niskim priorytecie nie ma wystarczającej ilości czasu procesora, aby zwolnić blokadę za pierwszym razem, otrzyma kolejną szansę w następnej rundzie planowania ”.
Nicole Hamilton,
@NicoleHamilton Więc dlatego czasami program otworzy kilka instancji na raz, jeśli nie otworzył się przy pierwszym kliknięciu (i kliknąłeś kilka razy) z powodu dużego obciążenia?
Simon Verbeke,

Odpowiedzi:

6

Czas rzeczywisty niekoniecznie oznacza „nie-nie”. Może po prostu zagłodzić inne procesy poza cykle procesora. Niektóre aplikacje nie mogą sobie z tym poradzić. To coś, z czym będziesz musiał eksperymentować.

Wysoka powinna być mniejszym problemem. Jednak nadal musisz monitorować system, aby sprawdzić, czy wszystkie aplikacje działają poprawnie.

Oto jak zmienić proces za pomocą wiersza polecenia, który można umieścić w skrócie:

http://support.microsoft.com/kb/191771

Keltari
źródło
1
W systemie Windows, to nie głodować inne procesy bardzo łatwo (w tym Task Managera samego).
user1686,
3
Wszystko zależy od twojego systemu. W zależności od intensywności procesora przez proces, powinowactwo w czasie rzeczywistym jest w porządku. Prowadzę teraz proces w czasie rzeczywistym bez żadnych problemów. Może także pomóc ustawić powinowactwo do jednego procesora, jednocześnie ustawiając priorytet w czasie rzeczywistym.
Keltari,
Jeśli proces jest ustawiony na czas rzeczywisty, czy będzie miał absolutny priorytet nad wszystkimi innymi procesami na rdzeniu, na którym działa? Próbowałem znaleźć sposób, aby jeden z moich rdzeni poświęcić Dwarf Fortress podczas jego działania.
SaintWacko,
3

Powiedziałbym, że to zależy. Jeśli masz tylko jeden rdzeń / procesor na komputerze i jest to zadanie wymagające dużej mocy procesora, nie ustawiłbym go w czasie rzeczywistym. Wysoka może być w porządku, ale to wymaga eksperymentowania.

Jeśli masz wiele rdzeni, a proces jest jednowątkowy: śmiało, ustaw go tak, jak chcesz. Pozostałe rdzenie będą nadal wolne, nawet jeśli jeden rdzeń jest obciążony w 100% przez cały czas.

Jeśli masz wiele rdzeni, a proces jest wielowątkowy: zależy to od tego, czy wszystkie wątki będą obciążone w 100%. Niektóre programy mają wątek „menedżera”, który wysyła pracę do innych wątków, ale sam nie wykonuje dużego przetwarzania. Dzięki temu jeden rdzeń byłby prawie wolny, a tym samym pozwalałby na wysoki priorytet lub priorytet w czasie rzeczywistym.

Inne programy spróbują pobrać wszystkie rdzenie. W tym przypadku wysoki może być w porządku, ale wymaga eksperymentowania.

Nawet inne pobierają tylko określoną liczbę rdzeni i mogą nie używać wszystkich dostępnych rdzeni. W takim przypadku priorytet lub wysoki priorytet w czasie rzeczywistym powinny być w porządku.

Jeśli nie masz jednego rdzenia, śmiało eksperymentuj. Przez większość czasu ustawienie go na wysoki, a nawet w czasie rzeczywistym, nie zaszkodzi. Możesz ustawić powinowactwo procesu (liczbę rdzeni, których może użyć) również w menedżerze zadań. W ten sposób możesz lepiej zrównoważyć obciążenie procesora. Może także pomóc obniżyć temperaturę i zużycie energii itp.

Simon Verbeke
źródło
+1 Dobra uwaga, że ​​aplikacja jednowątkowa nie stanowi problemu na maszynie wielordzeniowej, bez względu na to, jak jest związana z obliczeniami.
Nicole Hamilton,
Nie zapominaj jednak, że zgodnie z ostrzeżeniami procesy [głównie] jednowątkowe o wysokim priorytecie - nawet jeśli dotyczą tylko jednego rdzenia - mogą utrzymywać blokady synchronizacji globalnego systemu przez nietypowy okres czasu.
dyasta
1

To, czy to zadziała, zależy całkowicie od tego, co robi twoja aplikacja. Jeśli przechodzi przez długie, długie obliczenia, które nigdy nie muszą czekać na operacje we / wy, spodziewaj się, że uruchomienie tego z wysokim priorytetem może doprowadzić maszynę do upadku. Ale jeśli problemem jest opóźnienie, a aplikacja musi się bardzo szybko obudzić w odpowiedzi na zakończenie operacji we / wy lub podobne zdarzenie, wykonaj szybkie przetwarzanie, a następnie wróć do trybu uśpienia, wszystko będzie dobrze.

Nicole Hamilton
źródło
0

Ogólnie rzecz biorąc, każda aplikacja, która ustawia swój priorytet procesu głównego na coś innego niż normalny, negatywnie wpłynie na wszystko inne na twoim komputerze pod względem wydajności. Gdyby więc każda aplikacja przyjmowała takie samoocenione podejście, ostatecznie nic nie działałoby poprawnie.

Prawidłowy sposób używania wyższych priorytetów to indywidualne ZADANIA, a nie APLIKACJE. Te zadania powinny być uruchamiane tylko w razie potrzeby, a następnie zatrzymywać się lub zawieszać, gdy nie mają pracy. Jeśli podczas pisania aplikacji czujesz, że musisz zmienić priorytetowy poziom podstawowy, zastanów się, jak skrócić interwał, gdy jest to konieczne, tak krótko, jak to możliwe.

Warto nawet zainwestować w książkę lub kurs na temat równoczesnego i równoległego przetwarzania, zanim zbliżysz się do czegoś takiego jak priorytetowe wędrówki.


źródło