Как приоритеты работают на диспетчере задач и когда я должен / не устанавливать это?


30

Я установил приоритет некоторых процессов, чтобы увидеть, что на самом деле происходит, но, угадайте, что ... Ничего; все работает одинаково ...

Я обнаружил в Google, что приоритеты на самом деле не связаны со скоростью обработки, это правда? Почему не тогда? если процесс имеет наивысший приоритет, разве он не должен идти быстрее?


4
Краткий ответ: When should I set [priorities in Task Manager]? почти никогда.
Дэн Хендерсон

2
Еще одна важная вещь для понимания - это то, что соблюдение приоритетов уменьшает общий объем работы, которую может выполнить система. Вот почему обычные настольные операционные системы не являются операционными системами реального времени. И чем больше вы заставляете их вести себя как операционные системы реального времени, тем менее они эффективны. Перебои, например, взрывают кеши. Работа с более низким приоритетом все еще должна быть выполнена и все еще конкурировать за ввод / вывод. Делать менее эффективно, небольшими порциями, никому не выгодно.
Дэвид Шварц

Не пытайтесь думать за свой компьютер. Вы не выиграете. Он знает, как обрабатывать его темы гораздо лучше, чем вы.
b1nary.atr0phy,

Ответы:


52

Предположим, у вас есть карта «перейти к началу линии» для продуктового магазина. Вы идете в магазин, заполняете свою корзину, идете к кассе и обнаруживаете, что никого нет в очереди. Помогает ли ваша карта быстрее пройти проверку? Нет.

Приоритеты не влияют на скорость обработки, так как процесс с более высоким приоритетом не может работать быстрее или даже использовать больше процессорного времени ... нет, если это единственное, что хочет использовать процессор.

Чтобы действительно говорить об этом, нам нужно упомянуть темы. Процессы не «запускаются» в Windows. Потоки, которые являются частью процессов, - это то, что выполняется. (Хотя, если у процесса есть только один поток, различие довольно размыто снаружи.)

(Кстати: маркетинговая терминология, в соответствии с которой ЦП имеет, например, «четыре ядра и восемь потоков», вводит в заблуждение. У ЦП есть ядра, но у ЦП нет «потоков». Потоки являются частями процессов. Ядро ЦП без включенной гиперпоточности можно запускать один поток, при включенной гиперпоточности ядро может запускать два потока. Но у процессоров нет «потоков».)

Каждый поток всегда находится в одном из нескольких состояний планирования. Наиболее часто встречающиеся состояния: Ожидание (* nix называет это «заблокированным»; в обеих ОС это означает ожидание ввода-вывода или аналогичное, не использует процессорное время и не хочет его); Готов (хочет использовать процессорное время, но сейчас для него нет доступных процессоров); и работает . Только запущенные потоки потребляют процессорное время; т. е. если процесс не имеет запущенных потоков, будет видно, что он использует нулевое время процессора в таких инструментах, как диспетчер задач.

Поток может одновременно работать только на одном ядре (или, если включена гиперпоточность, «логический процессор»), поэтому процесс может использовать только столько ядер ЦП (или LP), сколько у него потоков, которые в данный момент хотят запускать , (То же самое можно сказать о системе в целом.)

Большинство потоков в большинстве систем проводят большую часть своего времени в состоянии ожидания. (Вот почему ваш бездействующий процесс должен получать более 95% процессорного времени, когда ваша система ничего не делает.) Исключениями могут быть «рабочие» потоки таких вещей, как видео или 3D-рендеринг, игры и т. Д. Очень мало потоков может реально использовать 100% ЦП, потому что они обычно должны работать с некоторыми входными данными, которые они должны откуда-то читать, и они обычно создают выходные данные, которые должны быть записаны куда-то. И они могут ссылаться на множество различных данных в памяти с течением времени, что может означать, что им приходится ждать, пока устранятся жесткие ошибки страниц.

Но потоки, выполняющие что-то вроде рендеринга видео или 3D-изображения, вполне могут потратить почти все свое время на «вычисления» в ЦП и очень мало ждать ввода-вывода. Такие потоки часто называют «привязанными к вычислениям», что означает, что их общая производительность в основном ограничена скоростью процессора.

Параметр, который вы задаете в диспетчере задач, фактически устанавливает «базовый приоритет» для всех потоков в процессе. Фактический или «текущий» приоритет потока может быть выше (но никогда не ниже базового). Подробнее об этом через минуту. Решения по планированию («кто запускается и на каком процессоре») всегда принимаются с использованием текущего приоритета потока. Приоритет имеет смысл только для потоков Ready и Running (или, другими словами, приоритет не имеет значения для потоков Waiting).

Windows использует алгоритм упреждающего планирования. Если только один поток в системе хочет использовать процессорное время, то не имеет значения, каков его приоритет; он получает 100% процессора. Дело не в том, что планировщик «сдерживает» часть возможностей ЦП, когда работает поток с низким приоритетом, на случай, если появится что-то с более высоким приоритетом.

Если два потока хотят использовать ЦП, и они имеют одинаковый приоритет, то они планируются с помощью так называемой «временной шкалы», и со временем каждый получает около 50% времени ЦП. Тогда как если они имеют разные приоритеты, то поток с более высоким приоритетом получает 100%, а низший - ничего .

(На практике он не получит ничего, потому что он будет испытывать периодическое «повышение приоритета избегания голодания», которое может давать ему несколько десятков мсек каждые 4 или 5 секунд или около того. Но на самом деле это не исключение из «более высокого приоритета»). wins ", потому что это делается путем корректировки приоритета истощенного потока.)

Если у вас более одного ядра процессора, все становится более интересным, и приоритеты в целом оказывают меньшее влияние. Предположим, у вас есть два потока, которые хотят работать. И предположим, что у вас есть два или более ядра ЦП, которые не выполняют ничего более равного или более высокого приоритета, чем эти потоки. Тогда каждый из двух потоков получит 100% ядра, независимо от их приоритетов .

(Два человека появляются в супермаркете, и есть две бесплатные шашки. У одного из клиентов есть карта «идти к голове». Не имеет значения.)

Версия tl; dr (пока): приоритеты не в том, «кто получает долю процессорного времени», а в том, «кто запускается первым».

Я не собираюсь вдаваться в подробности гиперпоточности, за исключением того, что скажу, что Windows обрабатывает каждый из двух «логических процессоров» в ядре почти так же, как если бы была отключена HT, то и ядро. то есть они рассматриваются как «настоящие» процессоры, за исключением того, что Windows будет очень стараться не использовать более одного LP в ядре за раз. то есть вы обычно не начинаете видеть оба LP в используемом ядре до тех пор, пока у вас не будет потоков больше, чем число ядер, которые пытаются запустить все одновременно. Это связано с тем, что два «логических процессора» не дают в два раза большей производительности, чем одно ядро ​​без гиперпотока.

О «базовом приоритете»: Windows будет корректировать («повышать» и «затухать») текущий приоритет потоков на основе того, что они сделали недавно. Потоки, которые недавно завершили операции ввода / вывода, обычно будут на две метки выше основания; Потоки пользовательского интерфейса (потоки, которые запускают окно) часто будут значительно выше; Связанные с процессором потоки обычно будут в их основе. Цель этого состоит в том, чтобы поддерживать отзывчивость в пользовательском интерфейсе программы, а также поддерживать поток запросов ввода-вывода к таким вещам, как диски.

Программа (процесс) также может изменять базовый приоритет каждого из своих потоков в пределах диапазона, определяемого приоритетом процесса (то, что вы задали в диспетчере задач). Но подавляющее большинство программ не беспокоит. (Больше из них следует.)

Есть и другие вещи. Из-за увеличения / уменьшения приоритета, а также из-за того, что многопроцессорные системы (многоядерные, или многопоточные, или и те, и другие) в наши дни так распространены, а также потому, что в Windows всегда есть что-то, работающее в фоновом режиме (но, мы надеемся, не потребляет много процессорного времени), и из-за эффектов как жесткого, так и мягкого «сродства» трудно запускать тестовые случаи и получать точные результаты, которые можно было бы здесь предсказать. Но это должно дать вам правильную картину.

В заключение...

Разумно оставить большинство вещей в «Нормальном». Если вы этого не сделаете, вы легко можете лишить себя чего-то, что вам действительно хотелось бы иметь (даже если вы можете не знать, что оно существует), например, функции очистки дискового кэша ОС. Действительно, многие процессы ОС будут отличаться от нормальных, и их следует оставлять там, где их помещает Windows.

Разумный вариант использования диспетчера задач для работы с приоритетами - это если у вас есть какая-то задача по загрузке ЦП (например, видео или 3D-рендеринг), и она замедляет использование системы во время ее работы. Правильно, верить этому или нет, понизить приоритет на одну-две ступени. Он с радостью будет использовать все циклы ЦП, которые больше никому не нужны, но останется в стороне от вашего интерактивного использования системы. Это может занять немного больше времени, чтобы сделать свою работу, но это будет сделано с минимальным вмешательством в ваше интерактивное использование других программ. Если вам не нравится этот компромисс, не делайте этого! Но установите его на высокий приоритет в попытке «заставить его работать быстрее», и он может повесить весь ваш пользовательский интерфейс, пока не закончится.

Никогда не устанавливайте ничего в так называемый класс приоритета Realtime.

(Правка - этот абзац добавлен) Хорошо, это крайнее утверждение. («Ни одно универсальное утверждение не является правдой - не исключая этого».) По крайней мере, не без тщательного рассмотрения. Если ваша цель - заставить что-то работать быстрее, это, вероятно, не поможет. Но это может «жестко заблокировать» вашу систему (требуется перезагрузка, или на большинстве современных машин требуется цикл питания). Или сделать его настолько безразличным, что оно может быть жестко заблокировано.

Примечание. Любое приложение видеоплеера должно использовать функцию «Планирование классов мультимедиа» в Vista и более поздних версиях. Это автоматически выдаст до 80% процессорного времени, рассчитанного на относительно короткие промежутки времени. Если вы не можете получить воспроизведение без сбоев, значит что-то не так.

Для получения дополнительной информации см. Главы о потоках и планировании в Windows Internals 6th Edition Соломона, Руссиновича и Ионеску.

См. Также мой ответ здесь для получения информации о том, как установлены приоритеты процессов и потоков, а также о значении столбца «Приоритет» в диспетчере задач.


1
Кстати, мой ответ на следующий связанный вопрос связан с: superuser.com/questions/949030/…
Джейми Ханрахан

1
Кроме того, между прочим: «Планирование», «Планировщик» и т. Д. Здесь относятся к подпрограммам ядра Windows, которые определяют, какие потоки запускать и на каких ЦП они должны работать. Не для «планирования задач», когда речь идет о запуске процессов в определенное время или в ответ на различные триггеры.
Джейми Ханрахан

@JamieHanrahan хорошо, я переместил это здесь: superuser.com/questions/1380473/…
Julien__

5

Изменение приоритетов изменяет способ, которым операционная система выделяет процессорное время для запуска приложений. Это дает заметные эффекты только в случае высокой загрузки ЦП.

Например, вы кодируете видео и смотрите другое видео одновременно. Вероятно, приложение кодирования будет использовать 100% вычислительной мощности на всех ядрах вашего процессора. В результате другие приложения могут заикаться.

Windows по умолчанию отдает одинаковый «нормальный» приоритет обоим приложениям. На этом этапе вы можете повысить приоритет вашего программного обеспечения проигрывателя фильмов. Таким образом, вы получите плавное воспроизведение видео за счет более медленного кодирования видео, поскольку программное обеспечение для кодирования будет ухудшено до фонового процесса по сравнению с видеопроигрывателем.


«Скорее всего, приложение кодирования будет использовать 100% вычислительной мощности на всех ядрах вашего процессора.» Это возможно только при наличии потоков кодирования , по крайней мере, с количеством ядер .
Джейми Ханрахан
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.