Groupes de planification

Ce document décrit le rôle des groupes de planification pendant le runtime d'accès concurrentiel.Un groupe de planification affine, ou regroupe, des tâches connexes.Chaque planificateur possède un ou plusieurs groupes de planification.Utilisez des groupes de planification lorsque vous avez besoin d'un niveau élevé de localité pour les tâches, par exemple, lorsqu'un groupe de tâches connexes tire profit d'une exécution sur le même nœud du processeur.À l'inverse, utilisez des instances du planificateur lorsque votre application dispose de spécifications de qualité spécifiques, par exemple, lorsque vous souhaitez limiter la quantité de ressources de traitement qui sont allouées à un groupe de tâches.Pour plus d'informations sur les instances du planificateur, consultez Instances de planificateur.

ConseilConseil

Le runtime d'accès concurrentiel fournit un planificateur par défaut. Par conséquent, vous n'êtes pas tenu 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 avec la Bibliothèque de modèles parallèles ou la Bibliothèque d'agents asynchrones si vous ne connaissez pas encore le runtime d'accès concurrentiel.

Chaque objet Scheduler a un groupe de planification par défaut pour chaque nœud de planification.Un nœud de planification est mappé à la topologie de 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), le nombre le plus grand étant retenu.Si vous n'associez pas explicitement une tâche à un groupe de planification, le planificateur choisit le groupe auquel la tâche est ajoutée.

La stratégie du planificateur SchedulingProtocol influence l'ordre dans lequel le planificateur exécute les tâches dans chaque groupe de planification.Lorsque SchedulingProtocol a la valeur EnhanceScheduleGroupLocality (qui est la valeur par défaut), le Planificateur de tâches sélectionne la tâche suivante dans le groupe de planification sur lequel il travaille lorsque la tâche actuelle se termine ou cède ses ressources de manière coopérative.Le Planificateur de tâches recherche un travail dans le groupe de planification actuel avant de passer au groupe disponible suivant.Inversement, lorsque SchedulingProtocol a la valeur EnhanceForwardProgress, le planificateur passe au groupe de planification suivant après la fin de chaque tâche.Pour obtenir un exemple qui compare ces stratégies, consultez Comment : utiliser des groupes de planifications pour influencer l'ordre d'exécution.

Le runtime utilise le concurrency::ScheduleGroup classe pour représenter des groupes de planification.Pour créer un ScheduleGroup d'objet, appelez le concurrency::CurrentScheduler::CreateScheduleGroup ou concurrency::Scheduler::CreateScheduleGroup méthode.Le runtime utilise un mécanisme de décompte de références pour contrôler la durée de vie des objets ScheduleGroup, tout comme il le fait pour les objets Scheduler.Lorsque vous créez un objet ScheduleGroup, le runtime affecte la valeur « un » au compteur de références.Le concurrency::ScheduleGroup::Reference méthode incrémente le compteur de référence d'une unité.Le concurrency::ScheduleGroup::Release méthode décrémente le compteur de référence d'une unité.

Dans le runtime d'accès concurrentiel, de nombreux types vous permettent d'associer un objet à un groupe de planification.Par exemple, la concurrency::agent bloc de message et de la classe des classes 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 objet ScheduleGroup pour planifier la tâche.

Vous pouvez également utiliser la concurrency::ScheduleGroup::ScheduleTask méthode pour planifier une tâche léger.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 Comment : utiliser des groupes de planifications pour influencer l'ordre d'exécution.

Voir aussi

Tâches

Comment : utiliser des groupes de planifications pour influencer l'ordre d'exécution

Concepts

Planificateur de tâches (runtime d'accès concurrentiel)

Instances de planificateur