IExecutionResource, structure
Abstraction d'un thread matériel.
Syntaxe
struct IExecutionResource;
Membres
Méthodes publiques
Nom | Description |
---|---|
IExecutionResource ::CurrentSubscriptionLevel | Retourne le nombre de racines de processeur virtuel activées et de threads externes abonnés actuellement associés au thread matériel sous-jacent que représente cette ressource d’exécution. |
IExecutionResource ::GetExecutionResourceId | Retourne un identificateur unique pour le thread matériel que cette ressource d’exécution représente. |
IExecutionResource ::GetNodeId | Retourne un identificateur unique pour le nœud processeur auquel appartient cette ressource d’exécution. |
IExecutionResource ::Remove | Retourne cette ressource d’exécution au Resource Manager. |
Notes
Les ressources d’exécution peuvent être autonomes ou associées à des racines de processeur virtuel. Une ressource d’exécution autonome est créée lorsqu’un thread de votre application crée un abonnement thread. Les méthodes ISchedulerProxy ::SubscribeThread et ISchedulerProxy ::RequestInitialVirtualProcessors créent des abonnements de thread et retournent une IExecutionResource
interface représentant l’abonnement. La création d’un abonnement de thread est un moyen d’informer Resource Manager qu’un thread donné participe à la file d’attente de travail à un planificateur, ainsi que les racines de processeur virtuel Resource Manager attribuées au planificateur. Resource Manager utilise les informations pour éviter de sursubcrire les threads matériels où il peut.
Hiérarchie d'héritage
IExecutionResource
Spécifications
En-tête : concrtrm.h
Espace de noms : concurrency
IExecutionResource ::CurrentSubscriptionLevel, méthode
Retourne le nombre de racines de processeur virtuel activées et de threads externes abonnés actuellement associés au thread matériel sous-jacent que représente cette ressource d’exécution.
virtual unsigned int CurrentSubscriptionLevel() const = 0;
Valeur de retour
Niveau d’abonnement actuel.
Notes
Le niveau d’abonnement vous indique le nombre de threads en cours d’exécution associés au thread matériel. Cela inclut uniquement les threads dont Resource Manager est conscient sous la forme de threads abonnés et de racines de processeur virtuel qui exécutent activement des proxys de threads.
Appel de la méthode ISchedulerProxy ::SubscribeCurrentThread, ou de la méthode ISchedulerProxy ::RequestInitialVirtualProcessors avec le paramètre doSubscribeCurrentThread
défini sur la valeur true
incrémente le niveau d’abonnement d’un thread matériel par un. Ils retournent également une IExecutionResource
interface représentant l’abonnement. Un appel correspondant à IExecutionResource ::Remove décrémente le niveau d’abonnement du thread matériel par un.
L’acte d’activation d’une racine de processeur virtuel à l’aide de la méthode IVirtualProcessorRoot ::Activate incrémente le niveau d’abonnement d’un thread matériel par un. Les méthodes IVirtualProcessorRoot ::D eactivate, ou IExecutionResource ::Remove décrémentent le niveau d’abonnement par un lorsqu’ils sont appelés sur une racine de processeur virtuel activée.
Resource Manager utilise des informations au niveau de l’abonnement comme l’une des façons de déterminer quand déplacer des ressources entre des planificateurs.
IExecutionResource ::GetExecutionResourceId, méthode
Retourne un identificateur unique pour le thread matériel que cette ressource d’exécution représente.
virtual unsigned int GetExecutionResourceId() const = 0;
Valeur de retour
Identificateur unique du thread matériel sous-jacent à cette ressource d’exécution.
Notes
Chaque thread matériel est affecté à un identificateur unique par le runtime d’accès concurrentiel. Si plusieurs ressources d’exécution sont associées au thread matériel, elles auront tous le même identificateur de ressource d’exécution.
IExecutionResource ::GetNodeId, méthode
Retourne un identificateur unique pour le nœud processeur auquel appartient cette ressource d’exécution.
virtual unsigned int GetNodeId() const = 0;
Valeur de retour
Identificateur unique pour un nœud de processeur.
Notes
Le runtime d’accès concurrentiel représente des threads matériels sur le système dans des groupes de nœuds de processeur. Les nœuds sont généralement dérivés de la topologie matérielle du système. Par exemple, tous les processeurs sur un socket spécifique ou un nœud NUMA spécifique peuvent appartenir au même nœud de processeur. Resource Manager affecte des identificateurs uniques à ces nœuds commençant 0
par jusqu’à et y compris nodeCount - 1
, où nodeCount
représente le nombre total de nœuds de processeur sur le système.
Le nombre de nœuds peut être obtenu à partir de la fonction GetProcessorNodeCount.
IExecutionResource ::Remove, méthode
Retourne cette ressource d’exécution au Resource Manager.
virtual void Remove(_Inout_ IScheduler* pScheduler) = 0;
Paramètres
pScheduler
Interface du planificateur qui effectue la demande de suppression de cette ressource d’exécution.
Notes
Utilisez cette méthode pour retourner des ressources d’exécution autonomes ainsi que des ressources d’exécution associées aux racines du processeur virtuel à Resource Manager.
S’il s’agit d’une ressource d’exécution autonome que vous avez reçue de l’une des méthodes ISchedulerProxy ::SubscribeCurrentThread ou ISchedulerProxy ::RequestInitialVirtualProcessors, l’appel de la méthode Remove
met fin à l’abonnement de thread que la ressource a été créée pour représenter. Vous devez mettre fin à tous les abonnements de thread avant d’arrêter un proxy de planificateur et devez appeler Remove
à partir du thread qui a créé l’abonnement.
Les racines du processeur virtuel peuvent également être retournées à Resource Manager en appelant la Remove
méthode, car l’interface IVirtualProcessorRoot
hérite de l’interface IExecutionResource
. Vous devrez peut-être retourner une racine de processeur virtuel en réponse à un appel à la méthode IScheduler ::RemoveVirtualProcessors , ou lorsque vous avez terminé avec une racine de processeur virtuel sursubcrite que vous avez obtenue à partir de la méthode ISchedulerProxy ::CreateOversubscriber . Pour les racines du processeur virtuel, il n’existe aucune restriction sur le thread qui peut appeler la Remove
méthode.
invalid_argument
est levée si le paramètre pScheduler
est défini sur NULL
.
invalid_operation
est levée si le paramètre pScheduler
est différent du planificateur pour lequel cette ressource d’exécution a été créée ou, avec une ressource d’exécution autonome, si le thread actuel est différent du thread qui a créé l’abonnement de thread.
Voir aussi
accès concurrentiel Namespace
IVirtualProcessorRoot, structure