Groupes de planification

Ce document décrit le rôle des groupes de planification dans le runtime d’accès concurrentiel. Une affinité de groupe de planification s’associe, ou regroupe des tâches associées. Chaque planificateur a un ou plusieurs groupes de planification. Utilisez des groupes de planification quand vous avez besoin d’un degré élevé de localité entre les tâches, par exemple, quand un groupe de tâches connexes tire parti d’une exécution sur le même nœud de processeur. À l’inverse, utilisez des instances de planificateur lorsque votre application a des exigences de qualité spécifiques, par exemple lorsque vous souhaitez limiter la quantité de ressources de traitement allouées à un ensemble de tâches. Pour plus d’informations sur les instances du planificateur, consultez Instances du planificateur.

Conseil

Le runtime d'accès concurrentiel fournit un planificateur par défaut, et vous n'êtes donc pas obligé d'en créer un dans votre application. Étant donné que le planificateur de tâches vous aide à affiner les performances de vos applications, nous vous recommandons de commencer par la bibliothèque de modèles parallèles (PPL) ou la bibliothèque d’agents asynchrones si vous débutez avec le runtime d’accès concurrentiel.

Chaque Scheduler objet a un groupe de planification par défaut pour chaque nœud de planification. Un nœud de planification est mappé à la topologie système sous-jacente. Le runtime crée un nœud de planification pour chaque package de processeur ou nœud NUMA (Non Uniform Memory Architecture), selon le nombre le plus grand. Si vous n’associez pas explicitement une tâche à un groupe de planification, le planificateur choisit le groupe auquel ajouter la tâche.

La SchedulingProtocol stratégie du planificateur influence l’ordre dans lequel le planificateur exécute les tâches dans chaque groupe de planification. Lorsque SchedulingProtocol la valeur est définie EnhanceScheduleGroupLocality (qui est la valeur par défaut), le planificateur de tâches choisit la tâche suivante dans le groupe de planifications sur lequel elle travaille lorsque la tâche actuelle se termine ou génère de manière coopérative. Le Planificateur de tâches recherche le groupe de planification actuel pour le travail avant de passer au groupe disponible suivant. À l’inverse, lorsqu’il SchedulingProtocol est défini EnhanceForwardProgresssur , le planificateur passe au groupe de planification suivant une fois chaque tâche terminée ou produit. Pour obtenir un exemple qui compare ces stratégies, consultez Guide pratique pour utiliser des groupes de planification pour influencer l’ordre d’exécution.

Le runtime utilise la classe concurrency ::ScheduleGroup pour représenter des groupes de planification. Pour créer un ScheduleGroup objet, appelez la méthode concurrency ::CurrentScheduler ::CreateScheduleGroup ou concurrency ::Scheduler ::CreateScheduleGroup . Le runtime utilise un mécanisme de comptage de référence pour contrôler la durée de vie des ScheduleGroup objets, tout comme avec Scheduler les objets. Lorsque vous créez un ScheduleGroup objet, le runtime définit le compteur de référence sur un objet. La méthode concurrency ::ScheduleGroup ::Reference incrémente le compteur de référence par un. La méthode concurrency ::ScheduleGroup ::Release décrémente le compteur de référence par un.

De nombreux types dans le runtime d’accès concurrentiel vous permettent d’associer un objet à un groupe de planification. Par exemple, la classe concurrency ::agent et les classes de bloc de message telles que concurrency ::unbounded_buffer, concurrency ::join et concurrency ::timer, fournissent des versions surchargées du constructeur qui prennent un ScheduleGroup objet. Le runtime utilise l’objet Scheduler associé à cet ScheduleGroup objet pour planifier la tâche.

Vous pouvez également utiliser la méthode concurrency ::ScheduleGroup ::ScheduleTask pour planifier une tâche légère. Pour plus d’informations sur les tâches légères, consultez Tâches légères.

Exemple

Pour obtenir un exemple qui utilise des groupes de planification pour contrôler l’ordre d’exécution des tâches, consultez Guide pratique pour utiliser des groupes de planification pour influencer l’ordre d’exécution.

Voir aussi

Planificateur de tâches
Instances de planificateur
Guide pratique pour utiliser des groupes de planification pour influencer l’ordre d’exécution