Планирование потоков Win32 - PullRequest
13 голосов
/ 18 марта 2009

Как я понимаю, планировщик потоков Windows не различает потоки, принадлежащие двум разным процессам, при условии, что все они имеют одинаковый базовый приоритет. У меня вопрос: если у меня есть два приложения, одно с одним потоком, а другое, скажем, с 50 потоками с одинаковым базовым приоритетом, означает ли это, что у второго процесса больше процессорного времени, чем у первого?

Ответы [ 5 ]

9 голосов
/ 18 марта 2009

Планирование в Windows выполняется с гранулярностью потока . Основная идея этого подхода заключается в том, что процессы не запускаются, а только предоставляют ресурсы и контекст, в котором работают их потоки. Возвращаясь к вашему вопросу, поскольку решения по планированию принимаются строго на основе потоков, не учитывается, к какому процессу относится поток. В вашем примере, если процесс A имеет 1 работающий поток, а процесс B имеет 50 исполняемых потоков, и все 51 поток имеют одинаковый приоритет, каждый поток получит 1/51 процессорного времени - Windows не даст процент процессора для обработки A и 50 процентов для обработки B . Чтобы понять алгоритмы планирования потоков, вы должны сначала понять уровни приоритетов, которые использует Windows. Вы можете см. здесь для быстрого ознакомления.

Попробуйте прочитать Внутренние компоненты Windows для более глубокого понимания.

5 голосов
/ 22 марта 2009

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

ИМХО лучший способ сделать это - использовать объекты задания для управления использованием процесса. Сначала вызовите CreateJobObject , затем SetInformationJobObject , чтобы ограничить максимальное использование ЦП процессами в объекте задания, и AssignProcessToJobObject , чтобы назначить процесс с 50 потоками для объекта задания. , Затем вы можете позволить ОС убедиться, что процесс из 50 потоков не потребляет слишком много процессорного времени.

3 голосов
/ 18 марта 2009

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

Windows Internals - отличная книга для получения дополнительной информации о планировщике потоков Windows.

2 голосов
/ 18 марта 2009

Это зависит от поведения потоков. В общем, с разницей в количестве потоков 50: 1, да, приложение с большим количеством потоков получит намного больше времени. Тем не менее, окна также используют динамическую приоритетность потоков, что может несколько изменить это. Динамическая приоритезация потоков описана здесь:

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

Соответствующий отрывок:

Базовый приоритет потока - это базовый уровень, с которого производятся эти восходящие корректировки. Текущий приоритет потока называется его динамическим приоритетом. Интерактивные потоки, которые выходят до того, как их временной интервал истекает, будут иметь тенденцию корректироваться вверх в приоритетном порядке по сравнению с их основным приоритетом. Связанные с вычислениями потоки, которые не выдают, потребляя весь свой временной интервал, будут иметь тенденцию к снижению приоритета, но не ниже базового уровня. Такое расположение часто называют эвристическим планированием. Это обеспечивает лучшую интерактивную производительность и имеет тенденцию уменьшать влияние системы на потоки "CPU Hog".

0 голосов
/ 28 октября 2013

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...