Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
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'est pas déjà associé à un. |
| 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 le Resource Manager que le planificateur est en train de s'arrêter. 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 fil du contexte d’exécution spécifié par le paramètre pContext et le retourne au pool libre de l’usine de proxy de fil. 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
Le 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 : concurrence
ISchedulerProxy::BindContext Méthode
Associe un contexte d’exécution à un proxy de thread, s'il n’est pas déjà associé à un.
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 surcharger.
Valeur de retour
Interface IVirtualProcessorRoot.
Notes
Utilisez cette méthode lorsque votre planificateur souhaite surutiliser 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 inscrire le thread actuel et en tenir compte 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. Le gestionnaire de ressources accède à la stratégie du planificateur en utilisant IScheduler::GetPolicy et utilise les valeurs des clés de stratégie MinConcurrency, MaxConcurrency et TargetOversubscriptionFactor pour déterminer combien de threads matériels affecter au planificateur initialement et combien 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, la méthode retourne une interface IExecutionResource. L’abonnement doit être arrêté ultérieurement à l’aide de la méthode IExecutionResource ::Remove .
Lors de la détermination des fils matériels sélectionnés, le Gestionnaire de ressources tente d’optimiser l'affinité avec le 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.
Méthode ISchedulerProxy::Shutdown
Avertit le Resource Manager que le planificateur est en train de s'arrêter. 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 de IVirtualProcessorRoot::Activate et faire en sorte que les proxies de fil s’exécutant sur eux quittent 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 au gestionnaire de ressources par le biais d’appels à la méthode Remove car toutes les racines de processeurs virtuels sont retournées au gestionnaire de ressources lors de l’arrêt.
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
L'interface IExecutionResource qui représente le thread actuel dans l'environnement d'exécution.
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 dans votre planificateur, avec les racines du processeur virtuel que le planificateur reçoit également de Resource Manager. Le Gestionnaire de ressources s'appuie sur des informations pour éviter toute sursouscription 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 fil du contexte d’exécution spécifié par le paramètre pContext et le retourne au pool libre de l’usine de proxy de fil. 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
concurrence Namespace
IScheduler, structure
IThreadProxy, structure
IVirtualProcessorRoot, structure
IResourceManager, structure