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. Créer un abonnement de thread est un moyen d’informer le Resource Manager qu’un thread donné participera à la file d’attente de travail d'un planificateur, ainsi qu'aux racines de processeur virtuel que le Resource Manager attribue au planificateur. Le gestionnaire de ressources utilise les informations pour éviter de surdimensionner les threads matériels là où il le peut.

Hiérarchie d'héritage

IExecutionResource

Spécifications

En-tête : concrtrm.h

Espace de noms : concurrence

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 fournissent également une interface IExecutionResource qui représente l'abonnement. Un appel correspondant à IExecutionResource::Remove réduit de un le niveau d'abonnement du thread matériel.

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::Deactivate, ou IExecutionResource::Remove, décrémentent par un niveau le niveau d'abonnement lorsqu'elles sont appelées 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 attribue des identificateurs uniques à ces nœuds en commençant par 0 et allant jusqu’à 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::méthode Remove

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

concurrence Namespace
IVirtualProcessorRoot, structure