Partager via


ISchedulerProxy, structure

Interface par laquelle les planificateurs communiquent avec le gestionnaire des ressources du runtime d'accès concurrentiel pour négocier l'allocation des ressources.

Syntaxe

struct ISchedulerProxy;

Membres

Méthodes publiques

Nom Description
ISchedulerProxy ::BindContext Associe un contexte d’exécution à un proxy de thread, s’il n’en est pas déjà associé.
ISchedulerProxy ::CreateOversubscriber Crée une racine de processeur virtuel sur le thread matériel associé à une ressource d’exécution existante.
ISchedulerProxy ::RequestInitialVirtualProcessors Demande une allocation initiale des racines du processeur virtuel. Chaque racine de processeur virtuel représente la possibilité d’exécuter un thread qui peut effectuer un travail pour le planificateur.
ISchedulerProxy ::Shutdown Avertit resource Manager que le planificateur s’arrête. Cela entraîne la récupération immédiate de toutes les ressources accordées au planificateur par Resource Manager.
ISchedulerProxy ::SubscribeCurrentThread Inscrit le thread actuel auprès de Resource Manager, en l’associant à ce planificateur.
ISchedulerProxy ::UnbindContext Dissocie un proxy de thread du contexte d’exécution spécifié par le pContext paramètre et le retourne au pool gratuit de la fabrique de proxy de thread. Cette méthode peut uniquement être appelée sur un contexte d’exécution lié via la méthode ISchedulerProxy ::BindContext et n’a pas encore été démarrée via le pContext paramètre d’un appel de méthode IThreadProxy ::SwitchTo .

Notes

Resource Manager remet une ISchedulerProxy interface à chaque planificateur qui s’inscrit auprès de celui-ci à l’aide de la méthode IResourceManager ::RegisterScheduler .

Hiérarchie d'héritage

ISchedulerProxy

Spécifications

En-tête : concrtrm.h

Espace de noms : concurrency

ISchedulerProxy ::BindContext, méthode

Associe un contexte d’exécution à un proxy de thread, s’il n’en est pas déjà associé.

virtual void BindContext(_Inout_ IExecutionContext* pContext) = 0;

Paramètres

pContext
Interface du contexte d’exécution à associer à un proxy de thread.

Notes

Normalement, la méthode IThreadProxy ::SwitchTo lie un proxy de thread à un contexte d’exécution à la demande. Toutefois, il existe des circonstances où il est nécessaire de lier un contexte à l’avance pour s’assurer que la SwitchTo méthode bascule vers un contexte déjà lié. Il s’agit du cas d’un contexte de planification UMS, car il ne peut pas appeler des méthodes qui allouent de la mémoire, et la liaison d’un proxy de thread peut impliquer une allocation de mémoire si un proxy de thread n’est pas facilement disponible dans le pool libre de la fabrique de proxy de thread.

invalid_argument est levée si le paramètre pContext a la valeur NULL.

ISchedulerProxy ::CreateOversubscriber, méthode

Crée une racine de processeur virtuel sur le thread matériel associé à une ressource d’exécution existante.

virtual IVirtualProcessorRoot* CreateOversubscriber(_Inout_ IExecutionResource* pExecutionResource) = 0;

Paramètres

pExecutionResource
Interface IExecutionResource qui représente le thread matériel que vous souhaitez oversubscribe.

Valeur de retour

Interface IVirtualProcessorRoot.

Notes

Utilisez cette méthode lorsque votre planificateur souhaite sursubcrire un thread matériel particulier pendant une durée limitée. Une fois que vous avez terminé avec la racine du processeur virtuel, vous devez le renvoyer au gestionnaire de ressources en appelant la méthode Remove sur l’interface IVirtualProcessorRoot .

Vous pouvez même sursubcrire une racine de processeur virtuel existante, car l’interface IVirtualProcessorRoot hérite de l’interface IExecutionResource .

ISchedulerProxy ::RequestInitialVirtualProcessors, méthode

Demande une allocation initiale des racines du processeur virtuel. Chaque racine de processeur virtuel représente la possibilité d’exécuter un thread qui peut effectuer un travail pour le planificateur.

virtual IExecutionResource* RequestInitialVirtualProcessors(bool doSubscribeCurrentThread) = 0;

Paramètres

doSubscribeCurrentThread
Indique s’il faut abonner le thread actuel et le compte pour celui-ci pendant l’allocation de ressources.

Valeur de retour

Interface IExecutionResource du thread actuel, si le paramètre doSubscribeCurrentThread a la valeur true. Si la valeur est false, la méthode retourne NULL.

Notes

Avant qu’un planificateur exécute un travail, il doit utiliser cette méthode pour demander des racines de processeur virtuel à partir de Resource Manager. Resource Manager accède à la stratégie du planificateur à l’aide de IScheduler ::GetPolicy et utilise les valeurs des clés MinConcurrencyde stratégie, MaxConcurrency et TargetOversubscriptionFactor détermine le nombre de threads matériels à affecter au planificateur initialement et le nombre de racines de processeur virtuel à créer pour chaque thread matériel. Pour plus d’informations sur la façon dont les stratégies du planificateur sont utilisées pour déterminer l’allocation initiale d’un planificateur, consultez PolicyElementKey.

Resource Manager accorde des ressources à un planificateur en appelant la méthode IScheduler ::AddVirtualProcessors avec une liste de racines de processeur virtuel. La méthode est appelée en tant que rappel dans le planificateur avant que cette méthode ne retourne.

Si le planificateur a demandé l’abonnement pour le thread actuel en définissant le paramètre doSubscribeCurrentThread truesur , la méthode retourne une IExecutionResource interface. L’abonnement doit être arrêté ultérieurement à l’aide de la méthode IExecutionResource ::Remove .

Lorsque vous déterminez les threads matériels sélectionnés, Resource Manager tente d’optimiser l’affinité de nœud de processeur. Si l’abonnement est demandé pour le thread actuel, il indique que le thread actuel a l’intention de participer au travail affecté à ce planificateur. Dans ce cas, les racines des processeurs virtuels alloués se trouvent sur le nœud du processeur sur lequel le thread actuel s’exécute, si possible.

L’acte d’abonnement à un thread augmente le niveau d’abonnement du thread matériel sous-jacent d’un seul. Le niveau d’abonnement est réduit d’une fois l’abonnement terminé. Pour plus d’informations sur les niveaux d’abonnement, consultez IExecutionResource ::CurrentSubscriptionLevel.

ISchedulerProxy ::Shutdown, méthode

Avertit resource Manager que le planificateur s’arrête. Cela entraîne la récupération immédiate de toutes les ressources accordées au planificateur par Resource Manager.

virtual void Shutdown() = 0;

Notes

Toutes les IExecutionContext interfaces reçues par le planificateur suite à l’abonnement d’un thread externe à l’aide des méthodes ISchedulerProxy::RequestInitialVirtualProcessors ou ISchedulerProxy::SubscribeCurrentThread doivent être retournées à Resource Manager IExecutionResource::Remove avant qu’un planificateur ne s’arrête lui-même.

Si votre planificateur avait des racines de processeur virtuel désactivées, vous devez les activer à l’aide d’IVirtualProcessorRoot ::Activate et faire en sorte que les proxys de thread s’exécutant sur eux conservent la Dispatch méthode des contextes d’exécution qu’ils distribuent avant d’appeler Shutdown sur un proxy de planificateur.

Il n’est pas nécessaire que le planificateur retourne individuellement toutes les racines du processeur virtuel accordées à Resource Manager par le biais d’appels à la méthode, car toutes les racines de processeurs virtuels sont retournées à Resource Manager lors de l’arrêt Remove .

ISchedulerProxy ::SubscribeCurrentThread, méthode

Inscrit le thread actuel auprès de Resource Manager, en l’associant à ce planificateur.

virtual IExecutionResource* SubscribeCurrentThread() = 0;

Valeur de retour

Interfacing IExecutionResource représentant le thread actuel dans le runtime.

Notes

Utilisez cette méthode si vous souhaitez que Resource Manager compte du thread actuel tout en allouant des ressources à votre planificateur et à d’autres planificateurs. Il est particulièrement utile lorsque le thread prévoit de participer au travail mis en file d’attente vers votre planificateur, ainsi que les racines du processeur virtuel que le planificateur reçoit de Resource Manager. Resource Manager utilise des informations pour éviter toute sursubscription inutile des threads matériels sur le système.

La ressource d’exécution reçue via cette méthode doit être retournée à Resource Manager à l’aide de la méthode IExecutionResource ::Remove . Le thread qui appelle la Remove méthode doit être le même thread que celui qui a précédemment appelé la SubscribeCurrentThread méthode.

L’acte d’abonnement à un thread augmente le niveau d’abonnement du thread matériel sous-jacent d’un seul. Le niveau d’abonnement est réduit d’une fois l’abonnement terminé. Pour plus d’informations sur les niveaux d’abonnement, consultez IExecutionResource ::CurrentSubscriptionLevel.

ISchedulerProxy ::UnbindContext, méthode

Dissocie un proxy de thread du contexte d’exécution spécifié par le pContext paramètre et le retourne au pool gratuit de la fabrique de proxy de thread. Cette méthode peut uniquement être appelée sur un contexte d’exécution lié via la méthode ISchedulerProxy ::BindContext et n’a pas encore été démarrée via le pContext paramètre d’un appel de méthode IThreadProxy ::SwitchTo .

virtual void UnbindContext(_Inout_ IExecutionContext* pContext) = 0;

Paramètres

pContext
Contexte d’exécution à dissocier de son proxy de thread.

Voir aussi

accès concurrentiel Namespace
IScheduler, structure
IThreadProxy, structure
IVirtualProcessorRoot, structure
IResourceManager, structure