Partager via


IScheduler, structure

Interface avec une abstraction d'un planificateur de tâches. Le gestionnaire des ressources du runtime d'accès concurrentiel utilise cette interface pour communiquer avec les planificateurs de tâches.

Syntaxe

struct IScheduler;

Membres

Méthodes publiques

Nom Description
IScheduler ::AddVirtualProcessors Fournit un planificateur avec un ensemble de racines de processeur virtuel pour son utilisation. Chaque IVirtualProcessorRoot interface représente le droit d’exécuter un thread unique qui peut effectuer un travail au nom du planificateur.
IScheduler ::GetId Retourne un identificateur unique pour le planificateur.
IScheduler ::GetPolicy Retourne une copie de la stratégie du planificateur. Pour plus d’informations sur les stratégies de planificateur, consultez SchedulerPolicy.
IScheduler ::NotifyResourcesExternallyBusy Avertit ce planificateur que les threads matériels représentés par l’ensemble de racines de processeur virtuel dans le tableau ppVirtualProcessorRoots sont désormais utilisés par d’autres planificateurs.
IScheduler ::NotifyResourcesExternallyIdle Avertit ce planificateur que les threads matériels représentés par l’ensemble de racines de processeur virtuel dans le tableau ppVirtualProcessorRoots ne sont pas utilisés par d’autres planificateurs.
IScheduler ::RemoveVirtualProcessors Lance la suppression des racines de processeur virtuel qui ont été précédemment allouées à ce planificateur.
IScheduler ::Statistics Fournit des informations relatives aux taux d’arrivée et d’achèvement des tâches, ainsi qu’à la modification de la longueur de file d’attente d’un planificateur.

Notes

Si vous implémentez un planificateur personnalisé qui communique avec Resource Manager, vous devez fournir une implémentation de l’interface IScheduler . Cette interface est une extrémité d’un canal bidirectionnel de communication entre un planificateur et Resource Manager. L’autre extrémité est représentée par les IResourceManager interfaces implémentées ISchedulerProxy par Resource Manager.

Hiérarchie d'héritage

IScheduler

Spécifications

En-tête : concrtrm.h

Espace de noms : concurrency

IScheduler ::AddVirtualProcessors, méthode

Fournit un planificateur avec un ensemble de racines de processeur virtuel pour son utilisation. Chaque IVirtualProcessorRoot interface représente le droit d’exécuter un thread unique qui peut effectuer un travail au nom du planificateur.

virtual void AddVirtualProcessors(
    _In_reads_(count) IVirtualProcessorRoot** ppVirtualProcessorRoots,
    unsigned int count) = 0;

Paramètres

ppVirtualProcessorRoots
Tableau d’interfaces IVirtualProcessorRoot représentant les racines du processeur virtuel ajoutées au planificateur.

count
Nombre d’interfaces IVirtualProcessorRoot dans le tableau.

Notes

Resource Manager appelle la AddVirtualProcessor méthode pour accorder un ensemble initial de racines de processeur virtuel à un planificateur. Il peut également appeler la méthode pour ajouter des racines de processeur virtuel au planificateur lorsqu’il rééquilibrage des ressources entre planificateurs.

IScheduler ::GetId, méthode

Retourne un identificateur unique pour le planificateur.

virtual unsigned int GetId() const = 0;

Valeur de retour

Identificateur entier unique.

Notes

Vous devez utiliser la fonction GetSchedulerId pour obtenir un identificateur unique pour l’objet qui implémente l’interface IScheduler , avant d’utiliser l’interface comme paramètre pour les méthodes fournies par Resource Manager. Vous êtes censé retourner le même identificateur lorsque la GetId fonction est appelée.

Un identificateur obtenu à partir d’une autre source peut entraîner un comportement non défini.

IScheduler ::GetPolicy, méthode

Retourne une copie de la stratégie du planificateur. Pour plus d’informations sur les stratégies de planificateur, consultez SchedulerPolicy.

virtual SchedulerPolicy GetPolicy() const = 0;

Valeur de retour

Copie de la stratégie du planificateur.

IScheduler ::NotifyResourcesExternallyBusy, méthode

Avertit ce planificateur que les threads matériels représentés par l’ensemble de racines de processeur virtuel dans le tableau ppVirtualProcessorRoots sont désormais utilisés par d’autres planificateurs.

virtual void NotifyResourcesExternallyBusy(
    _In_reads_(count) IVirtualProcessorRoot** ppVirtualProcessorRoots,
    unsigned int count) = 0;

Paramètres

ppVirtualProcessorRoots
Tableau d’interfaces IVirtualProcessorRoot associées aux threads matériels sur lesquels d’autres planificateurs sont occupés.

count
Nombre d’interfaces IVirtualProcessorRoot dans le tableau.

Notes

Il est possible qu’un thread matériel particulier soit affecté à plusieurs planificateurs en même temps. L’une des raisons de ce problème peut être qu’il n’existe pas suffisamment de threads matériels sur le système pour satisfaire la concurrence minimale pour tous les planificateurs, sans partager de ressources. Une autre possibilité est que les ressources sont temporairement affectées à d’autres planificateurs lorsque le planificateur propriétaire ne les utilise pas, par le biais de toutes ses racines de processeur virtuel sur ce thread matériel en cours de désactivation.

Le niveau d’abonnement d’un thread matériel est indiqué par le nombre de threads abonnés et les racines de processeur virtuel activées associées à ce thread matériel. Du point de vue d’un planificateur particulier, le niveau d’abonnement externe d’un thread matériel est la partie de l’abonnement auquel contribuent d’autres planificateurs. Les notifications indiquant que les ressources sont occupées en externe sont envoyées à un planificateur lorsque le niveau d’abonnement externe d’un thread matériel passe de zéro au territoire positif.

Les notifications via cette méthode sont envoyées uniquement aux planificateurs qui ont une stratégie où la valeur de la MinConcurrency clé de stratégie est égale à la valeur de la MaxConcurrency clé de stratégie. Pour plus d’informations sur les stratégies de planificateur, consultez SchedulerPolicy.

Un planificateur qui se qualifie pour les notifications obtient un ensemble de notifications initiales lors de sa création, en l’informant que les ressources qu’il vient d’affecter sont occupées en externe ou inactives.

IScheduler ::NotifyResourcesExternallyIdle, méthode

Avertit ce planificateur que les threads matériels représentés par l’ensemble de racines de processeur virtuel dans le tableau ppVirtualProcessorRoots ne sont pas utilisés par d’autres planificateurs.

virtual void NotifyResourcesExternallyIdle(
    _In_reads_(count) IVirtualProcessorRoot** ppVirtualProcessorRoots,
    unsigned int count) = 0;

Paramètres

ppVirtualProcessorRoots
Tableau d’interfaces IVirtualProcessorRoot associées à des threads matériels sur lesquels d’autres planificateurs sont devenus inactifs.

count
Nombre d’interfaces IVirtualProcessorRoot dans le tableau.

Notes

Il est possible qu’un thread matériel particulier soit affecté à plusieurs planificateurs en même temps. L’une des raisons de ce problème peut être qu’il n’existe pas suffisamment de threads matériels sur le système pour satisfaire la concurrence minimale pour tous les planificateurs, sans partager de ressources. Une autre possibilité est que les ressources sont temporairement affectées à d’autres planificateurs lorsque le planificateur propriétaire ne les utilise pas, par le biais de toutes ses racines de processeur virtuel sur ce thread matériel en cours de désactivation.

Le niveau d’abonnement d’un thread matériel est indiqué par le nombre de threads abonnés et les racines de processeur virtuel activées associées à ce thread matériel. Du point de vue d’un planificateur particulier, le niveau d’abonnement externe d’un thread matériel est la partie de l’abonnement auquel contribuent d’autres planificateurs. Les notifications indiquant que les ressources sont occupées en externe sont envoyées à un planificateur lorsque le niveau d’abonnement externe d’un thread matériel tombe à zéro d’une valeur positive précédente.

Les notifications via cette méthode sont envoyées uniquement aux planificateurs qui ont une stratégie où la valeur de la MinConcurrency clé de stratégie est égale à la valeur de la MaxConcurrency clé de stratégie. Pour plus d’informations sur les stratégies de planificateur, consultez SchedulerPolicy.

Un planificateur qui se qualifie pour les notifications obtient un ensemble de notifications initiales lors de sa création, en l’informant que les ressources qu’il vient d’affecter sont occupées en externe ou inactives.

IScheduler ::RemoveVirtualProcessors, méthode

Lance la suppression des racines de processeur virtuel qui ont été précédemment allouées à ce planificateur.

virtual void RemoveVirtualProcessors(
    _In_reads_(count) IVirtualProcessorRoot** ppVirtualProcessorRoots,
    unsigned int count) = 0;

Paramètres

ppVirtualProcessorRoots
Tableau d’interfaces IVirtualProcessorRoot représentant les racines du processeur virtuel à supprimer.

count
Nombre d’interfaces IVirtualProcessorRoot dans le tableau.

Notes

Resource Manager appelle la RemoveVirtualProcessors méthode pour reprendre un ensemble de racines de processeur virtuel à partir d’un planificateur. Le planificateur est censé appeler la méthode Remove sur chaque interface lorsqu’elle est effectuée avec les racines du processeur virtuel. N’utilisez pas d’interface IVirtualProcessorRoot une fois que vous avez appelé la Remove méthode dessus.

Le paramètre ppVirtualProcessorRoots pointe vers un tableau d’interfaces. Parmi l’ensemble de racines de processeur virtuel à supprimer, les racines n’ont jamais été activées peuvent être retournées immédiatement à l’aide de la Remove méthode. Les racines qui ont été activées et sont en cours d’exécution ou ont été désactivées et attendent que le travail arrive, doit être retourné de manière asynchrone. Le planificateur doit effectuer chaque tentative de suppression de la racine du processeur virtuel le plus rapidement possible. Le fait de retarder la suppression des racines du processeur virtuel peut entraîner une sursubscription involontaire dans le planificateur.

IScheduler ::Statistics, méthode

Fournit des informations relatives aux taux d’arrivée et d’achèvement des tâches, ainsi qu’à la modification de la longueur de file d’attente d’un planificateur.

virtual void Statistics(
    _Out_ unsigned int* pTaskCompletionRate,
    _Out_ unsigned int* pTaskArrivalRate,
    _Out_ unsigned int* pNumberOfTasksEnqueued) = 0;

Paramètres

pTaskCompletionRate
Nombre de tâches effectuées par le planificateur depuis le dernier appel à cette méthode.

pTaskArrivalRate
Nombre de tâches qui sont arrivées dans le planificateur depuis le dernier appel à cette méthode.

pNumberOfTasksEnqueued
Nombre total de tâches dans toutes les files d’attente du planificateur.

Notes

Cette méthode est appelée par Resource Manager pour collecter des statistiques pour un planificateur. Les statistiques collectées ici seront utilisées pour générer des algorithmes de commentaires dynamiques afin de déterminer quand il convient d’affecter davantage de ressources au planificateur et quand retirer des ressources. Les valeurs fournies par le planificateur peuvent être optimistes et ne doivent pas nécessairement refléter le nombre actuel avec précision.

Vous devez implémenter cette méthode si vous souhaitez que Resource Manager utilise des commentaires sur des éléments tels que l’arrivée des tâches pour déterminer comment équilibrer la ressource entre votre planificateur et d’autres planificateurs inscrits auprès de Resource Manager. Si vous choisissez de ne pas collecter de statistiques, vous pouvez définir la clé DynamicProgressFeedback de stratégie sur la valeur DynamicProgressFeedbackDisabled dans la stratégie de votre planificateur, et Resource Manager n’appelle pas cette méthode sur votre planificateur.

En l’absence d’informations statistiques, Resource Manager utilisera les niveaux d’abonnement de threads matériels pour prendre des décisions d’allocation de ressources et de migration. Pour plus d’informations sur les niveaux d’abonnement, consultez IExecutionResource ::CurrentSubscriptionLevel.

Voir aussi

accès concurrentiel Namespace
PolicyElementKey
SchedulerPolicy, classe
IExecutionContext, structure
IThreadProxy, structure
IVirtualProcessorRoot, structure
IResourceManager, structure