Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этом документе описывается роль групп расписаний в параллельном выполнении. Группа расписания объединяет или группирует связанные задачи вместе. Каждый планировщик имеет одну или несколько групп расписаний. Используйте группы расписаний, когда требуется высокая степень локальности связанных задач, например если группу связанных задач лучше выполнять в одном узле процессора. С другой стороны, используйте экземпляры планировщика, если вашему приложению требуются конкретные требования к качеству, например, когда вы хотите ограничить количество вычислительных ресурсов, выделяемых набору задач. Дополнительные сведения об экземплярах планировщика см. в разделе "Экземпляры планировщика".
Совет
Среда выполнения с параллелизмом предоставляет планировщик по умолчанию, и таким образом не требуется создавать планировщик в приложении. Так как планировщик задач помогает точно настроить производительность приложений, рекомендуется начать с библиотеки параллельных шаблонов (PPL) или библиотеки асинхронных агентов, если вы не знакомы со средой выполнения параллелизма.
Каждый Scheduler объект имеет группу расписания по умолчанию для каждого узла планирования. Узел планирования сопоставляется с базовой топологией системы. Среда выполнения создает один узел планирования для каждого пакета процессора или узла архитектуры NUMA, в зависимости от того, какое количество больше. Если задача не связана явным образом с группой расписаний, планировщик выбирает группу для добавления задачи.
Политика SchedulingProtocol планировщика влияет на порядок выполнения задач в каждой группе расписаний. Если SchedulingProtocol задано значение EnhanceScheduleGroupLocality (которое является значением по умолчанию), планировщик задач выбирает следующую задачу из группы расписаний, над которой она работает, когда текущая задача завершается или совместно дает. Планировщик задач выполняет поиск работы в текущей группе расписаний, прежде чем перейти к следующей доступной группе. И наоборот, если SchedulingProtocol задано EnhanceForwardProgressзначение, планировщик переходит в следующую группу расписаний после завершения каждой задачи или получения. Пример сравнения этих политик см. в разделе "Практическое руководство. Использование групп расписаний для влияния на порядок выполнения".
Среда выполнения использует класс параллелизма::ScheduleGroup для представления групп расписаний. Чтобы создать ScheduleGroup объект, вызовите метод concurrency::CurrentScheduler::CreateScheduleGroup или concurrency::Scheduler::CreateScheduleGroup. Среда выполнения использует механизм подсчета ссылок для управления временем жизни объектов ScheduleGroup, так же, как и с объектами Scheduler. При создании ScheduleGroup объекта среда выполнения устанавливает значение счетчика ссылок равным единице. Метод конкурентности::ScheduleGroup::Reference увеличивает счетчик ссылок на один. Метод concurrency::ScheduleGroup::Release уменьшает счетчик ссылок на единицу.
Многие типы в Среде выполнения Concurrency позволяют связать объект с группой расписаний. Например, класс concurrency::agent и классы блоков сообщений, такие как concurrency::unbounded_buffer, concurrency::join и concurrency::timer, предоставляют перегруженные версии конструктора, принимающие объект ScheduleGroup. Среда выполнения использует Scheduler объект, связанный с этим ScheduleGroup объектом, для планирования задачи.
Для планирования упрощенной задачи можно также использовать метод параллелизма::ScheduleGroup::ScheduleTask . Дополнительные сведения о упрощенных задачах см. в разделе "Упрощенные задачи".
Пример
Пример, использующий группы расписаний для управления порядком выполнения задачи, см. в разделе "Практическое руководство. Использование групп расписаний для влияния порядка выполнения".
См. также
Планировщик заданий
Экземпляры планировщика
Практическое руководство. Использование групп планирования для определения порядка выполнения