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

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

Совет

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

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

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

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

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

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

Пример

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

См. также

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