Группы расписаний

В этом документе описана роль групп расписаний в среде выполнения с параллелизмом. Группа расписаний связывает или объединяет в группу родственные задачи. Все планировщики имеют одну или несколько групп расписаний. Группы расписаний используются, когда требуется высокая локальность заданий, например если группу связанных заданий лучше выполнять в одном узле процессора. Кроме того, экземпляры планировщиков можно использовать, если у приложения есть определенные требования к качеству, например при необходимости ограничить количество ресурсов обработки, выделяемых набору задач. Дополнительные сведения об экземплярах планировщиков см. в разделе Экземпляры планировщика.

Совет

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

Каждый объект Scheduler имеет группу расписаний по умолчанию для каждого узла планирования. Узел планирования выполняет сопоставление топологии базовой системы. Среда выполнения создает один узел планирования для каждого пакета процессора или узла NUMA, в зависимости от того, что больше. Если задача не связана с группой расписаний явным образом, планировщик выбирает группу, в которую ее добавить.

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

В среде выполнения для представления групп расписаний используется класс Concurrency::ScheduleGroup. Чтобы создать объект ScheduleGroup, нужно вызвать метод Concurrency::CurrentScheduler::CreateScheduleGroup или Concurrency::Scheduler::CreateScheduleGroup. Среда выполнения использует механизм подсчета ссылок для управления временем существования объектов ScheduleGroup точно так же, как в случае с объектами Scheduler. При создании объекта ScheduleGroup среда выполнения задает значение счетчика ссылок, равное 1. Метод Concurrency::ScheduleGroup::Reference увеличивает значение счетчика ссылок на один. Метод Concurrency::ScheduleGroup::Release уменьшает значение счетчика ссылок на один.

Многие типы в среде выполнения с параллелизмом позволяют связать объект с группой расписаний. Например, класс Concurrency::agent и классы блока сообщений, такие как Concurrency::unbounded_buffer, Concurrency::join и Concurrency::timer, предоставляют перегруженные версии конструктора, принимающего объект ScheduleGroup. Среда выполнения использует объект Scheduler, связанный с объектом ScheduleGroup, для планирования задачи.

Кроме того, для планирования упрощенной задачи можно использовать метод Concurrency::ScheduleGroup::ScheduleTask. Дополнительные сведения об упрощенных задачах см. в разделе Упрощенные задачи.

Пример

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

См. также

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

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

Другие ресурсы

Экземпляры планировщика

Практическое руководство. Использование групп расписаний для определения порядка выполнения

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

Дата

Журнал

Причина

Июль 2010

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

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