Поделиться через


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

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

СоветСовет

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

Каждый объект 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 метод планирования простой задачи.Дополнительные сведения об упрощенных задачах см. в разделе Упрощенные задачи.

Пример

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

См. также

Задачи

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

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

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

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