Политики планировщика
В этом документе описана роль политик планировщика в среде выполнения с параллелизмом.Политика планировщика определяет стратегию, которую планировщик использует при управлении задачами.Например, рассмотрим приложение, которое требует некоторых задач для выполнения на THREAD_PRIORITY_NORMAL и другие задачи для выполнения на THREAD_PRIORITY_HIGHEST.Можно создать два экземпляра планировщика заданий: один определяет ContextPriority политики THREAD_PRIORITY_NORMAL и второй, который определяет ту же политику, чтобы быть THREAD_PRIORITY_HIGHEST.
С помощью планировщика заданий политик, можно разделить доступных вычислительных ресурсов и присвоить фиксированный набор ресурсов для каждого планировщика заданий.Например, рассмотрим параллельный алгоритм, который невозможно использовать более чем с четырьмя процессорами.Можно создать политику планировщика, которая не позволяет задачам использовать более четырех процессоров одновременно.
Совет |
---|
Параллелизм среда предоставляет планировщика по умолчанию.Таким образом не нужно создавать в приложении.Так как планировщик заданий помогает оптимизировать производительность приложений, рекомендуется начать с раздела Библиотека параллельных шаблонов или Библиотека асинхронных агентов, если вы не знакомы со средой выполнения с параллелизмом. |
При использовании concurrency::CurrentScheduler::Create, concurrency::Scheduler::Create, или concurrency::Scheduler::SetDefaultSchedulerPolicy метод для создания экземпляра планировщика заданий, можно предоставить concurrency::SchedulerPolicy , содержащий коллекцию пар "ключ значение", которые определяют поведение планировщика.Конструктор SchedulerPolicy принимает переменное число аргументов.Первый аргумент — количество элементов политики, которые собирается задать пользователь.Остальные аргументы представляют собой пары "ключ-значение" для каждого элемента политики.В следующем примере создается объект SchedulerPolicy, задающий три элемента политики.Среда выполнения использует значения по умолчанию для разделов политики, которые не указаны.
SchedulerPolicy policy(3,
MinConcurrency, 2,
MaxConcurrency, 4,
ContextPriority, THREAD_PRIORITY_HIGHEST
);
Concurrency::PolicyElementKey перечисление определяет ключи политики, которые связаны с планировщиком заданий.В следующей таблице описаны ключи политики и значения по умолчанию, используемые средой выполнения для каждого из них.
Ключ политики |
Описание |
Значение по умолчанию |
---|---|---|
SchedulerKind |
A concurrency::SchedulerType значение, которое указывает тип потоков, используемых для планирования задач. |
ThreadScheduler(используется обычный потоков).Это единственное допустимое значение для этого раздела. |
MaxConcurrency |
Значение unsigned int, задающее максимальное количество ресурсов параллелизма, которые используются планировщиком. |
|
MinConcurrency |
Значение unsigned int, задающее минимальное количество ресурсов параллелизма, которые используются планировщиком. |
1 |
TargetOversubscriptionFactor |
Значение unsigned int, задающее, сколько потоков необходимо выделить каждому ресурсу для обработки. |
1 |
LocalContextCacheSize |
Значение unsigned int, задающее максимальное число контекстов, которые можно кэшировать в локальной очереди каждого виртуального процессора. |
8 |
ContextStackSize |
Значение unsigned int, задающее размер стека (в килобайтах), который необходимо зарезервировать для каждого контекста. |
0 (использовать размер стека по умолчанию) |
ContextPriority |
Значение int, задающее потоковый приоритет каждого контекста.Это может быть любое значение, которое можно передать SetThreadPriority или INHERIT_THREAD_PRIORITY. |
THREAD_PRIORITY_NORMAL |
SchedulingProtocol |
A concurrency::SchedulingProtocolType значение, которое определяет используемый алгоритм планирования. |
EnhanceScheduleGroupLocality |
DynamicProgressFeedback |
A concurrency::DynamicProgressFeedbackType значение, которое указывает, следует ли балансировки ресурсы, сведения о ходе выполнения на основе статистики. Примечание не устанавливайте эту политику для ProgressFeedbackDisabled , поскольку он зарезервирован для использования средой выполнения. |
ProgressFeedbackEnabled |
Каждый планировщик использует собственную политику для планирования задач.Политики, которые связаны с одной планировщика заданий не влияют на поведение других планировщика заданий.Кроме того, невозможно изменить политику планировщика после создания объекта Scheduler.
Важно |
---|
Для управления атрибутами потоков, создаваемых средой выполнения, следует использовать только политики планировщиков.Не изменяйте сходство потоков или приоритета потоков, созданных средой выполнения, поскольку, может привести к непредвиденному поведению. |
Среда выполнения с параллелизмом создает планировщик по умолчанию, если он не создан явно.Если вы хотите использовать планировщика по умолчанию в приложении, но необходимо задать политику для этого планировщика заданий для использования, вызвать concurrency::Scheduler::SetDefaultSchedulerPolicy метода, прежде чем планировать параллельную работу.Если не вызывается метод Scheduler::SetDefaultSchedulerPolicy, среда выполнения использует значения политики по умолчанию из таблицы.
Использование concurrency::CurrentScheduler::GetPolicy и concurrency::Scheduler::GetPolicy методов для получения копии политики планировщика заданий.Значения политики, полученные от этих методов, могут отличаться от значений политики, задаваемых при создании планировщика.
Пример
Примеры использования конкретных планировщик политик для управления поведением планировщик, см Практическое руководство. Задание определенных политик планировщика и Практическое руководство. Создание агентов, использующих определенные политики планировщика.
См. также
Задачи
Практическое руководство. Задание определенных политик планировщика
Практическое руководство. Создание агентов, использующих определенные политики планировщика