Политики планировщика

В этом документе описана роль политик планировщика в среде выполнения с параллелизмом. Политика планировщика определяет стратегию, которую планировщик использует при управлении задачами. Например, рассмотрим приложение, для которого нужно, чтобы некоторые задачи использовали планируемые потоки в режиме пользователя (UMS), а другие задачи — стандартный потоковый механизм. Можно создать два экземпляра планировщика: один задает в своей политике создание потоков UMS, а второй — задает в своей политике стандартные потоки. Дополнительные сведения о UMS см. в разделе Планирование в режиме пользователя.

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

Совет

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

При использовании метода 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

Значение Concurrency::SchedulerType, задающее, нужно ли использовать для планирования задач стандартные потоки или UMS-потоки.

ThreadScheduler (используйте стандартные потоки)

MaxConcurrency

Значение unsigned int, задающее максимальное количество ресурсов параллелизма, которые используются планировщиком.

Concurrency::MaxExecutionResources

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

Значение Concurrency::SchedulingProtocolType, задающее используемый алгоритм планирования.

EnhanceScheduleGroupLocality

DynamicProgressFeedback

Значение Concurrency::DynamicProgressFeedbackType, задающее, нужно ли перераспределять ресурсы в соответствии со статистическими данными о ходе выполнения.

Примечание. Не устанавливайте эту политику в значение ProgressFeedbackDisabled. Синтаксис ProgressFeedbackDisabled зарезервирован для использования средой выполнения.

ProgressFeedbackEnabled

Каждый планировщик использует собственную политику для планирования задач. Таким образом, политики, связанные с одним планировщиком, не влияют на поведение других планировщиков. Кроме того, невозможно изменить политику планировщика после создания объекта Scheduler.

Важно!

Для управления атрибутами потоков, создаваемых средой выполнения, следует использовать только политики планировщиков.Изменение сходства или приоритета потоков, созданных средой выполнения приводит к неопределенному поведению.

Среда выполнения с параллелизмом создает планировщик по умолчанию, если он не создан явно. Если вы хотите использовать в приложении планировщик по умолчанию, но при этом ему нужно задать политику, вызовите метод Concurrency::Scheduler::SetDefaultSchedulerPolicy перед планированием параллельной работы. Если не вызывается метод Scheduler::SetDefaultSchedulerPolicy, среда выполнения использует значения политики по умолчанию из таблицы.

Для извлечения копии политики планировщика необходимо использовать методы Concurrency::CurrentScheduler::GetPolicy и Concurrency::Scheduler::GetPolicy. Значения политики, полученные от этих методов, могут отличаться от значений политики, задаваемых при создании планировщика. Например, значение политики UMSThreadDefault задает, что планировщик использует UMS-потоки, если эта функция доступна в операционной системе (например, в 64-разрядной версии Windows 7). Если UMS-потоки недоступны, планировщик задает данное значение политики равным ThreadScheduler, что означает, что планировщик должен использовать стандартные потоки.

Пример

Примеры, в которых конкретные политики планировщика используются для контроля поведения планировщика, см. в разделах Практическое руководство. Задание определенных политик планировщика и Практическое руководство. Создание агентов, использующих определенные политики планировщика.

См. также

Задачи

Практическое руководство. Задание определенных политик планировщика

Практическое руководство. Создание агентов, использующих определенные политики планировщика

Основные понятия

Планировщик задач (среда выполнения с параллелизмом)

Журнал изменений

Дата

Журнал

Причина

Июль 2010

Содержимое реорганизовано.

Улучшение информации.