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 MinConcurrency
de 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
true
sur , 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