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


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

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


26
2017-08-29 01:45


происхождения


Не могли бы вы объяснить, почему вы, как многие другие люди, ожидают, что «приоритет» будет иметь какое-либо отношение к скорости? Я удивлен, что это настолько противоречиво для многих людей. Если огни на перекрестке дают вам «приоритет» при повороте зеленого, означает ли это, что ваш автомобиль внезапно движется быстрее? Если вы получите «приоритетный» посадку на самолете, означает ли это, что самолет будет двигаться быстрее для вас? Если вы повышаете приоритет задачи в своем списке дел, вы ожидаете, что задача внезапно станет короче ?! Я никогда не понимал, какая линия рассуждений заставляет людей задавать этот вопрос! - Mehrdad
Легко ... Я пробовал использовать эту функцию с процессом в течение долгого времени, думая, что им нужно больше времени процессора. Наверное, я думал, что быстрее пересечь страну, если дорога будет твоей, чем если бы тебе пришлось делиться ею со всеми ... Как амбулация: D @mehrdad - Pablo Gomez
Хорошо, но даже в случае с машиной скорой помощи вам нужно, чтобы другие люди мешали ваша дорожка чтобы увидеть какую-либо разницу. Итак, для сравнения, есть ли у вас другие программы фактически работает (а не просто на холостом ходу) в фоновом режиме при изменении приоритета вашей программы? И используют ли они любую из «полос» (по аналогии, процессоры / диски / и т. Д.), Которые нужны вашей программе? Если они есть, то вы должен видеть разницу в скорости. Если нет, то почему вы ожидаете увидеть это? - Mehrdad
Короткий ответ: When should I set [priorities in Task Manager]?  Больше никогда. - Dan Henderson
Еще одна важная вещь для понимания заключается в том, что обеспечение приоритетов снижает общий объем работы, которую может выполнять система. Вот почему обычные настольные операционные системы не являются операционными системами реального времени. И чем больше вы заставляете их вести себя как операционные системы реального времени, тем они менее эффективны. Прерывания, например, выдувают кеши. Работа с более низким приоритетом по-прежнему должна выполняться и по-прежнему конкурировать за ввод-вывод. Выполнение менее эффективно, в небольших кусках, никому не выгодно. - David Schwartz


ответы:


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

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

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

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

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

Большинство потоков большинства систем проводят большую часть времени в состоянии ожидания. Исключениями могут быть «рабочие» потоки таких вещей, как видео или 3D-рендеринг, игры и т. Д.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


46
2017-08-29 02:13



Кстати, мой ответ на следующий связанный вопрос связан: superuser.com/questions/949030/... - Jamie Hanrahan
Кроме того, кстати: «Планирование», «планировщик» и т. Д. Здесь относятся к подпрограммам ядра Windows, которые решают, какие потоки запускаются, и какие процессоры они должны запускать. Не для «планирования задач», а именно для запуска процессов в определенное время или в ответ на различные триггеры. - Jamie Hanrahan
Стоит щедрость. Я что-то узнал - nixda
Что ж, спасибо тебе! (И если это вызывает какие-либо вопросы, не стесняйтесь спрашивать.) - Jamie Hanrahan


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

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

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


5
2017-08-29 02:12



«Скорее всего, приложение кодирования будет использовать 100% вычислительную мощность на всех ваших ядрах процессора». Это возможно только в том случае, если есть хотя бы число-ядер кодирование потоков. - Jamie Hanrahan