Планирование потоков Win32

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

Ответы

Ответ 1

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

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

Ответ 2

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

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

Ответ 3

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

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

Ответ 4

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

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

Соответствующая выдержка:

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

Ответ 5

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

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