Програми в режимі користувача зазвичай не можуть сповільнити графічний інтерфейс вашої ОС. Однак ситуація не настільки чітка, як здається. Не існує жодної програми в режимі користувача, яка б на 100% користувальницького режиму, або через системні виклики (особливо файлову систему), або через віртуальне відображення пам'яті.
У більшості випадків ОС не зациклюється на роботі процесора, вона зачекана на очікуванні деякого ресурсу вводу / виводу. Це особливо очевидно, коли у вас закінчується фізична пам'ять і починаєте заходити у файл сторінки (хоча зауважте, що ОС може розмістити пам’ять у файлі сторінки у вільний час, навіть якщо доступна достатня кількість фізичної оперативної пам’яті). Windows зазвичай щодо цього досить розумний, але це "цілком можливо" зламати.
Якщо це дійсно CPU, це, швидше за все, пов'язано з жадібним драйвером (переважна більшість з яких не написано Microsoft). Драйвери в режимі ядра звільнені від попереднього багатозадачності (як із затримки, так і з точки зору надійності), тому якщо драйвер виконує другий довгий цикл на процесорі, вам не пощастить, його не буде випущено.
Прекрасним та простим інструментом для перегляду цього є процес Explorer (від SysInternals), який показує вам час ядра ЦП (тобто, яка частина роботи процесора на ядрі виконується в ядрі, на відміну від користувача самі програми). Windows 7 і пізніші версії також включають це у свій диспетчер завдань (це червона лінія у графіках використання ЦП).
Загалом, переважна багатозадачність не врятує дизайнерів ОС від необхідності йти на компроміси. Завжди завжди коштує все, і планування завдань дійсно дуже складне (зараз моя ОС перебуває в жанрі понад 2000 потоків - це досить багато, і я насправді не роблю "нічого"). Чи було б краще приділити потокам менший час, і витратити більше часу на зміну контексту? Чи було б краще приділяти їм довші часи, жертвуючи затримкою?
Отже, перевірте, що роблять жорсткі диски. Перевірте, як використовується ваша пам'ять. Перевірте час ядра. Це, швидше за все, покаже вам, чому Windows втрачає відповідальність під час великої роботи. Деякі з них можна виправити (звільнення пам'яті, обмеження пам’яті-порушника, вибір афінності процесора вручну ...), деякі вирішуються просто шляхом постійного оновлення драйверів (графічні драйвери були досить помітні для проблем, які вони викликали, яка, ймовірно, зіграла свою роль в Windows, переносячи їх з режиму ядра в режим користувача в останніх версіях).
Також, будучи предметом графічного процесора, сучасні Windows використовують прискорення графічного процесора для надання графічного інтерфейсу (насправді, до точки, як це зробила і Windows XP). Якщо ваша програма суттєво оподатковує GPU, це також може призвести до повільної чутливості Windows, особливо в Aero. Оскільки графічні процесори все частіше використовуються як "гіпер" процесори GP, це може бути суттєвим навіть поза іграми і подібними.
Іншим головним правопорушником є погано написана багатопотокова програма. Убити кешування пам’яті досить просто, якщо ви робите нерозумні речі, а оперативна пам’ять надзвичайно повільна в порівнянні з самим процесором, тому без ефективного кешування процесор стає дуже-дуже повільним (хоча він взагалі чекає весь час). Це ще складніше для багатоядерних процесорів (та багатопроцесорних систем), оскільки для забезпечення узгодженості багато операцій з багатопотоковими операціями потребують недійсного кешованого даних (так що один процесор не отримує доступу до "старого" значення змінна в пам'яті зі свого кешу / регістрів). Всі ці речі неймовірно швидкі, але ... Процесори швидші. Набагато швидше. Що, звичайно, також представляє проблеми різних постачальників процесорів, які по-різному поводяться з одними і тими самими речами, повністю відокремленими від значно вищого рівня ОС.сильно паралельні, вони більше не виконують одну інструкцію за іншою.
Тож навіть якщо ОС робить все ідеально (очевидно, неможливий ідеал), вона все одно може зупинитися через проблеми з обладнанням та спілкування з обладнанням. Яке добре, що у вас є 4-ядерний процесор, коли вашій програмі вдається повністю наситити R / W оперативної пам'яті? Яка користь у наявності швидкого жорсткого диска, коли кожен байт, який він читає, повинен пройти через процесор (пам’ятаєте PIO?). Кожна апаратна операція, яка не використовує прямий доступ до пам'яті, може потенційно зупинити ваш процесор.
І тепер більшість Windows насправді працює як додатки в режимі користувача. І вони також взаємодіють із запущеними програмами - якщо я попрошу explorer.exe
зробити щось для мене, він поки що нічого не може зробити. Якщо я надішлю мільярд віконних повідомлень у вікно, це залишить слід.
Там так багато відбувається, весь час ... гарантії дуже важкі. Зауважте, як швидше стають речі, як тільки на екрані "ctrl-alt-delete" насправді вмикається - раптом це ніби нічого не було :)