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


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

Темы в этой части документации описывают важные возможности планировщика заданий Concurrency Runtime. Планировщик задач полезен, если вы хотите точно настроить производительность существующего кода, использующего среду выполнения параллелизма.

Внимание

Планировщик задач недоступен из приложения универсальная платформа Windows (UWP). Дополнительные сведения см. в статье "Создание асинхронных операций в C++ для приложений UWP".

В Visual Studio 2015 и более поздних версиях класс concurrency::task и связанные типы в ppltasks.h используют Windows ThreadPool в качестве планировщика. Этот раздел больше не относится к типам, определенным в файле ppltasks.h. Параллельные алгоритмы, такие как parallel_for, продолжают использовать планировщик Concurrency Runtime по умолчанию.

Совет

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

Планировщик задач планирует и координирует задачи во время выполнения. Задача — это единица работы, которая выполняет определенное задание. Обычно задача выполняется параллельно с другими задачами. В качестве примеров задач можно назвать работу, выполняемую элементами группы задач, параллельными алгоритмами и асинхронными агентами.

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

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

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

Заголовок Описание
Экземпляры планировщика В этом разделе описываются экземпляры планировщиков и использование классов concurrency::Scheduler и concurrency::CurrentScheduler для управления ими. Используйте экземпляры планировщика, когда требуется связать явные политики планирования с определенными типами рабочих нагрузок.
Правила планировщика В этом разделе описывается роль политик планировщика. Используйте политики планировщика, если нужно управлять стратегией, которую планировщик применяет при управлении задачами.
Группы планирования В этом разделе описывается роль групп расписаний. Используйте группы расписаний, когда требуется высокая степень локальности связанных задач, например если группу связанных задач лучше выполнять в одном узле процессора.
Упрощенные задачи В этом разделе описывается роль упрощенных задач. Упрощенные задачи полезны при адаптации существующего кода к использованию функциональных возможностей планирования среды выполнения с параллелизмом.
Контексты В этом разделе описывается роль контекстов, функция concurrency::wait и класс concurrency::Context. Используйте эту функциональность, если необходимо управлять блокированием, разблокированием и выдачей контекстов или если требуется разрешить превышение лимита в приложении.
Функции управления памятью В этом разделе описываются функции concurrency::Alloc и concurrency::Free. Эти функции могут улучшить производительность памяти путем выделения и освобождения памяти в параллельном режиме.
Сравнение с другими моделями параллелизма В этом разделе описываются различия между механизмами приоритетного планирования и координированного планирования.
Библиотека параллельных шаблонов В этом разделе описывается использование различных параллельных шаблонов, таких как параллельные алгоритмы, в ваших приложениях.
Библиотека асинхронных агентов В этом разделе описывается использование асинхронных агентов в ваших приложениях.
Среда выполнения с параллелизмом Описывает среду выполнения с параллелизмом, которая упрощает процесс параллельного программирования и содержит ссылки на соответствующие разделы.