Stratégies de planificateur
Ce document décrit le rôle des stratégies du planificateur dans le runtime d'accès concurrentiel.Une stratégie du planificateur contrôle la stratégie utilisée par le planificateur lorsqu'il gère des tâches.Par exemple, considérez une application qui requiert certaines tâches à exécuter au niveau THREAD_PRIORITY_NORMAL et d'autres tâches à exécuter au niveau THREAD_PRIORITY_HIGHEST.Vous pouvez créer deux instances de Planificateur : un qui spécifie le ContextPriority la stratégie THREAD_PRIORITY_NORMAL et une autre qui spécifie la même stratégie à être THREAD_PRIORITY_HIGHEST.
À l'aide de stratégies du Planificateur, vous pouvez répartir les ressources de traitement disponibles et affecter un ensemble fixe de ressources à chaque Planificateur.Par exemple, imaginez un algorithme parallèle qui ne peut pas monter en charge au-delà de quatre processeurs.Vous pouvez alors créer une stratégie de planificateur qui limite ses tâches de façon à ne pas utiliser plus de quatre processeurs simultanément.
Conseil |
---|
Concurrency Runtime fournit un ordonnanceur par défaut.Par conséquent, il est inutile de créer 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. |
Lorsque vous utilisez le concurrency::CurrentScheduler::Create, concurrency::Scheduler::Create, ou concurrency::Scheduler::SetDefaultSchedulerPolicy méthode pour créer une instance du Planificateur, vous fournissez un concurrency::SchedulerPolicy objet qui contient une collection de paires clé-valeur qui spécifient le comportement du Planificateur.Le constructeur SchedulerPolicy prend un nombre variable d'arguments.Le premier argument est le nombre d'éléments de stratégie que vous allez spécifier.Les arguments restants sont des paires clé-valeur pour chaque élément de stratégie.L'exemple suivant crée un objet SchedulerPolicy qui spécifie trois éléments de stratégie.Le runtime utilise les valeurs par défaut pour les clés de stratégie qui ne sont pas spécifiés.
SchedulerPolicy policy(3,
MinConcurrency, 2,
MaxConcurrency, 4,
ContextPriority, THREAD_PRIORITY_HIGHEST
);
Le concurrency::PolicyElementKey énumération définit les clés de stratégie qui sont associées avec le Planificateur de tâches.Le tableau suivant décrit les clés de stratégie ainsi que la valeur par défaut que le runtime utilise pour chacune d'elles.
Clé de stratégie |
Description |
Valeur par défaut |
---|---|---|
SchedulerKind |
A concurrency::SchedulerType valeur qui spécifie le type de threads à utiliser pour planifier des tâches. |
ThreadScheduler(utilisez des threads normales).Il s'agit de la seule valeur valide pour cette clé. |
MaxConcurrency |
Valeur unsigned int qui spécifie le nombre maximal de ressources d'accès concurrentiel utilisées par le planificateur. |
|
MinConcurrency |
Valeur unsigned int qui spécifie le nombre minimal de ressources d'accès concurrentiel utilisées par le planificateur. |
1 |
TargetOversubscriptionFactor |
Valeur unsigned int qui spécifie le nombre de threads à allouer à chaque ressource de traitement. |
1 |
LocalContextCacheSize |
Valeur unsigned int qui spécifie le nombre maximal de contextes qui peuvent être mis en cache dans la file d'attente locale de chaque processeur virtuel. |
8 |
ContextStackSize |
Valeur unsigned int qui spécifie la taille de la pile, en kilo-octets, à réserver pour chaque contexte. |
0 (utiliser la taille de pile par défaut) |
ContextPriority |
Valeur int qui spécifie la priorité de thread de chaque contexte.Il peut s'agir de toute valeur que vous pouvez passer à SetThreadPriority ou INHERIT_THREAD_PRIORITY. |
THREAD_PRIORITY_NORMAL |
SchedulingProtocol |
A concurrency::SchedulingProtocolType valeur qui spécifie l'algorithme de planification à utiliser. |
EnhanceScheduleGroupLocality |
DynamicProgressFeedback |
A concurrency::DynamicProgressFeedbackType valeur qui spécifie s'il faut rééquilibrer les ressources en fonction des informations de progression basée sur les statistiques. Remarque ne définissez pas cette stratégie ProgressFeedbackDisabled parce qu'il est réservé pour une utilisation par le runtime. |
ProgressFeedbackEnabled |
Chaque planificateur utilise sa propre stratégie lorsqu'il planifie des tâches.Les stratégies qui sont associées à un planificateur n'affectent pas le comportement de n'importe quel autre Planificateur.De plus, vous ne pouvez pas modifier la stratégie du planificateur après avoir créé l'objet Scheduler.
Important
Utilisez les stratégies du planificateur uniquement pour contrôler les attributs pour les threads créés par le runtime.Ne modifiez pas l'affinité de thread ou la priorité des threads créés par le runtime car qui peut provoquer un comportement non défini.
Le runtime crée un planificateur par défaut à votre place si vous n'en créez pas un explicitement.Si vous souhaitez utiliser l'ordonnanceur par défaut dans votre application, mais vous souhaitez spécifier une stratégie pour que le planificateur à utiliser, appelez le concurrency::Scheduler::SetDefaultSchedulerPolicy méthode avant de planifier les travaux parallèle.Si vous n'appelez pas la méthode Scheduler::SetDefaultSchedulerPolicy, le runtime utilise les valeurs de stratégie par défaut fournies dans le tableau.
Utilisation du concurrency::CurrentScheduler::GetPolicy et le concurrency::Scheduler::GetPolicy méthodes pour récupérer une copie de la politique du Planificateur.Les valeurs de stratégie que vous recevez de ces méthodes peuvent différer des valeurs de stratégie que vous spécifiez lors de la création du planificateur.
Exemple
Pour examiner les exemples qui utilisent des stratégies spécifiques Planificateur pour contrôler le comportement du Planificateur, voir Comment : spécifier des stratégies de planificateur et Comment : créer des agents qui utilisent des stratégies de planificateur spécifiques.
Voir aussi
Tâches
Comment : spécifier des stratégies de planificateur
Comment : créer des agents qui utilisent des stratégies de planificateur spécifiques