Aplikacje trybu użytkownika zazwyczaj nie mogą spowolnić GUI twojego systemu operacyjnego. Jednak sytuacja nie jest tak wyraźna, jak się wydaje. Nie ma jednej aplikacji trybu użytkownika, która byłaby w 100% w trybie użytkownika, z powodu wywołań systemowych (zwłaszcza systemu plików) lub z powodu mapowania pamięci wirtualnej.
W większości przypadków system operacyjny nie blokuje pracy procesora, ale utknął na jakimś zasobie I / O. Jest to szczególnie widoczne, gdy zabraknie pamięci fizycznej i zaczniesz wchodzić do pliku stronicowania (chociaż pamiętaj, że system operacyjny może umieścić pamięć w pliku stronicowania w czasie wolnym, nawet jeśli jest dostępna duża ilość fizycznej pamięci RAM). Windows jest zwykle dość mądry w tej kwestii, ale całkiem możliwe jest „złamanie” tego.
Jeśli tak naprawdę jest to procesor, najprawdopodobniej jest to spowodowane zachłannym sterownikiem (którego zdecydowana większość to nie napisane przez Microsoft). Sterowniki trybu jądra są zwolnione z wielozadaniowości prewencyjnej (zarówno ze względu na opóźnienia, jak i niezawodność), więc jeśli kierowca uruchomi drugą długą pętlę na CPU, nie będziesz miał szczęścia, nie zostanie on wyprzedzony.
Świetnym i prostym narzędziem do zobaczenia tego jest Process Explorer (z SysInternals), który pokazuje czas jądra procesora (tj. Ile pracy procesora na rdzeniu odbywa się w jądrze, w przeciwieństwie do użytkownika same aplikacje). Windows 7 i późniejsze również zawierają to w swoim menedżerze zadań (jest to czerwona linia na wykresach użycia procesora).
Podsumowując, wielozadaniowość z wyprzedzeniem nie chroni projektantów systemu operacyjnego przed koniecznością kompromisów. Zawsze jest koszt na wszystko, a planowanie zadań jest naprawdę bardzo trudne (w tej chwili mój system operacyjny żongluje ponad 2000 wątków - to całkiem sporo, a tak naprawdę nie robię „niczego”). Czy lepiej byłoby dać wątkom mniejsze fragmenty czasu i poświęcić więcej czasu na zmianę kontekstu? Czy lepiej byłoby dać im dłuższe fragmenty, rezygnując z opóźnień?
Sprawdź więc, co robią dyski twarde. Sprawdź, jak używasz pamięci. Sprawdź czas jądra. To prawdopodobnie pokaże, dlaczego system Windows traci odpowiedzialność, gdy wykonujesz ciężką pracę. Niektóre z nich można usunąć (zwolnienie pamięci, ograniczenie przestępcy pamięci, ręczne wybieranie powinowactwa procesora ...), niektóre są rozwiązywane po prostu przez aktualizację sterowników (sterowniki grafiki były dość godne uwagi z powodu problemów, które spowodowały który prawdopodobnie odgrywał rolę w systemie Windows, wyrzucając je z trybu jądra do trybu użytkownika w ostatnich wersjach).
Współczesny system Windows, wykorzystując GPU, używa akceleracji GPU do renderowania GUI (właściwie do pewnego stopnia, podobnie jak Windows XP). Jeśli aplikacja znacząco obciąża GPU, może to również prowadzić do powolnej reakcji systemu Windows, zwłaszcza w Aero. Ponieważ procesory graficzne są coraz częściej wykorzystywane jako „hiper-procesory” GP, może to mieć znaczenie nawet poza grami i takimi.
Innym ważnym przestępcą jest źle napisana aplikacja wielowątkowa. Dość łatwo jest zabić pamięć podręczną, jeśli robisz głupie rzeczy, a pamięć RAM jest bardzo powolna w porównaniu z samym procesorem, więc bez wydajnego buforowania procesor staje się bardzo, bardzo powolny (nawet jeśli w zasadzie czeka cały czas). Jest to jeszcze bardziej skomplikowane w przypadku procesorów wielordzeniowych (i systemów wieloprocesorowych), ponieważ w celu zapewnienia spójności wiele operacji wielowątkowych wymaga unieważnienia danych buforowanych (tak, że jeden procesor nie ma dostępu do „starej” wartości zmienna w pamięci z pamięci podręcznej / rejestrów). Wszystkie te rzeczy są niesamowicie szybkie, ale ... Procesory są szybsze. O wiele szybciej. Co oczywiście wprowadza również problemy różnych dostawców procesorów obsługujących te same rzeczy w różny sposób, całkowicie oddzielonych od znacznie wyższego poziomu systemu operacyjnego. Współczesne procesory (486+, więc tak, to bardzo stara funkcja, o której nie ma pojęcia wielu niepokojących programistów) ciężko równolegle, nie wykonują już jednej instrukcji po drugiej.
Więc nawet jeśli system operacyjny robi wszystko doskonale (oczywiście niemożliwy ideał), wciąż może przestać działać z powodu problemów ze sprzętem i komunikacji ze sprzętem. Co dobrego jest w tym, że masz czterordzeniowy procesor, gdy twoja aplikacja całkowicie nasyca pamięć RAM R / W? Co dobrego ma szybki dysk twardy, gdy każdy odczytany bajt musi przejść przez procesor (pamiętaj PIO?). Każda operacja sprzętowa, która nie korzysta z bezpośredniego dostępu do pamięci, może potencjalnie zablokować procesor.
Obecnie większość systemów Windows działa jako aplikacje trybu użytkownika. I interakcja z uruchomionymi aplikacjami - jeśli o to pytam explorer.exe
aby coś dla mnie zrobić, nie może zrobić nic innego w tym czasie. Jeśli wyślę miliard komunikatów systemu Windows do okna, pozostawi to ślad.
Tak wiele się dzieje, cały czas ... gwarancje są bardzo trudne. Zwróć uwagę, jak szybko stają się rzeczy, gdy tylko ekran „ctrl-alt-delete” rzeczywiście się włącza - nagle jest tak, jakby nic się nie stało :)