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

Les rubriques de cette partie de la documentation décrivent les fonctionnalités importantes du planificateur de tâches du runtime d’accès concurrentiel. Le planificateur de tâches est utile lorsque vous souhaitez affiner les performances de votre code existant qui utilise le runtime d’accès concurrentiel.

Important

Le planificateur de tâches n’est pas disponible à partir d’une application plateforme Windows universelle (UWP). Pour plus d’informations, consultez Création d’opérations asynchrones en C++ pour les applications UWP.

Dans Visual Studio 2015 et versions ultérieures, la classe concurrency ::task et les types associés dans ppltasks.h utilisent windows ThreadPool comme planificateur. Cette rubrique ne s'applique plus aux types qui sont définis dans ppltasks.h. Les algorithmes parallèles comme parallel_for continuent à utiliser le runtime d'accès concurrentiel en tant que planificateur par défaut.

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.

Le planificateur de tâches planifie et coordonne les tâches au moment de l'exécution. Une tâche est une unité de travail qui effectue un travail spécifique. En règle générale, une tâche peut s’exécuter en parallèle avec d’autres tâches. Le travail effectué par les éléments de groupe de tâches, les algorithmes parallèles et les agents asynchrones sont tous des exemples de tâches.

Le planificateur de tâches gère les détails liés à la planification efficace des tâches sur les ordinateurs dotés de multiples ressources informatiques. Il utilise également les nouvelles fonctionnalités du système d'exploitation sous-jacent. Par conséquent, les applications qui utilisent le runtime d'accès concurrentiel évoluent et s'améliorent automatiquement sur du matériel qui possède des capacités étendues.

La comparaison avec d’autres modèles concurrentiels décrit les différences entre les mécanismes de planification préemptive et coopérative. Le planificateur de tâches utilise la planification coopérative et un algorithme de vol de travail avec le planificateur de préemption du système d'exploitation pour optimiser l'utilisation des ressources de traitement.

Le runtime d'accès concurrentiel fournit un planificateur par défaut pour que vous n'ayez pas à gérer les détails de l'infrastructure. Ainsi, vous n’utilisez habituellement pas le planificateur de tâches directement. Toutefois, pour répondre aux besoins de qualité de votre application, vous pouvez utiliser le planificateur de tâches pour fournir votre propre stratégie de planification ou associer des planificateurs spécifiques à des tâches spécifiques. Par exemple, supposons que vous ayez une routine de tri parallèle qui n'évolue pas au-delà de quatre processeurs. Vous pouvez utiliser des stratégies de planificateur pour créer un planificateur qui génère pas plus de quatre tâches simultanées. L'exécution de la routine de tri sur ce planificateur permet aux autres planificateurs actifs d'utiliser toutes les ressources de traitement restantes.

Intitulé Description
Instances de planificateur Décrit les instances de planificateur et la manière d'utiliser les classes concurrency::Scheduler et concurrency::CurrentScheduler pour les gérer. Utilisez les instances de planificateur pour associer des stratégies de planification explicites à des types spécifiques de charges de travail.
Stratégies de planificateur Décrit le rôle des stratégies de planificateur. Utilisez des stratégies de planificateur pour contrôler la stratégie utilisée par le planificateur pour gérer des tâches.
Groupes de planification Décrit le rôle des 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.
Tâches légères Décrit le rôle des tâches légères. Les tâches légères s’avèrent utiles quand vous adaptez du code existant pour utiliser les fonctionnalités de planification du runtime d’accès concurrentiel.
Contextes Décrit le rôle des contextes, la fonction concurrency::wait et la classe concurrency::Context. Utilisez cette fonctionnalité quand vous avez besoin de contrôler le moment auquel les contextes bloquent, débloquent et produisent, ou quand vous voulez activer le surabonnement dans votre application.
Fonctions de gestion de la mémoire Décrit les fonctions concurrency::Alloc et concurrency::Free. Ces fonctions peuvent améliorer les performances de la mémoire en allouant ou en libérant de la mémoire de façon simultanée.
Comparaison avec d’autres modèles concurrentiels Décrit les différences entre les mécanismes de planification de préemption et de coopération.
Bibliothèque de modèles parallèles Décrit comment utiliser divers modèles parallèles, par exemple, des algorithmes parallèles, dans vos applications.
Bibliothèque d’agents asynchrones Décrit comment utiliser des agents asynchrones dans vos applications.
Concurrency Runtime Décrit le runtime d'accès concurrentiel, qui simplifie la programmation parallèle, et contient des liens vers les rubriques connexes.