Share via


Struttura IExecutionResource

Un'astrazione per un thread hardware.

Sintassi

struct IExecutionResource;

Membri

Metodi pubblici

Nome Descrizione
IExecutionResource::CurrentSubscriptionLevel Restituisce il numero di radici del processore virtuale attivate e thread esterni sottoscritti attualmente associati al thread hardware sottostante rappresentato da questa risorsa di esecuzione.
IExecutionResource::GetExecutionResourceId Restituisce un identificatore univoco per il thread hardware rappresentato da questa risorsa di esecuzione.
IExecutionResource::GetNodeId Restituisce un identificatore univoco per il nodo del processore a cui appartiene questa risorsa di esecuzione.
IExecutionResource::Remove Restituisce questa risorsa di esecuzione a Resource Manager.

Osservazioni:

Le risorse di esecuzione possono essere autonome o associate alle radici del processore virtuale. Una risorsa di esecuzione autonoma viene creata quando un thread nell'applicazione crea una sottoscrizione thread. I metodi ISchedulerProxy::SubscribeThread e ISchedulerProxy::RequestInitialVirtualProcessors creano sottoscrizioni di thread e restituiscono un'interfaccia IExecutionResource che rappresenta la sottoscrizione. La creazione di una sottoscrizione thread è un modo per informare Resource Manager che un determinato thread parteciperà al lavoro in coda a un'utilità di pianificazione, insieme alle radici del processore virtuale assegnate da Resource Manager all'utilità di pianificazione. Resource Manager usa le informazioni per evitare l'oversubscrizione dei thread hardware in cui è possibile.

Gerarchia di ereditarietà

IExecutionResource

Requisiti

Intestazione: concrtrm.h

Spazio dei nomi: Concurrency

Metodo IExecutionResource::CurrentSubscriptionLevel

Restituisce il numero di radici del processore virtuale attivate e thread esterni sottoscritti attualmente associati al thread hardware sottostante rappresentato da questa risorsa di esecuzione.

virtual unsigned int CurrentSubscriptionLevel() const = 0;

Valore restituito

Livello di sottoscrizione corrente.

Osservazioni:

Il livello di sottoscrizione indica il numero di thread in esecuzione associati al thread hardware. Sono inclusi solo i thread di Cui Resource Manager è a conoscenza sotto forma di thread sottoscritti e radici del processore virtuale che eseguono attivamente proxy di thread.

Chiamando il metodo ISchedulerProxy::SubscribeCurrentThread o il metodo ISchedulerProxy::RequestInitialVirtualProcessors con il parametro doSubscribeCurrentThread impostato sul valore true incrementa il livello di sottoscrizione di un thread hardware di uno. Restituiscono anche un'interfaccia IExecutionResource che rappresenta la sottoscrizione. Una chiamata corrispondente a IExecutionResource::Remove decrementa il livello di sottoscrizione del thread hardware di uno.

L'azione di attivazione di una radice del processore virtuale usando il metodo IVirtualProcessorRoot::Activate incrementa il livello di sottoscrizione di un thread hardware di uno. I metodi IVirtualProcessorRoot::D eactivate o IExecutionResource::Remove decrementano il livello di sottoscrizione di uno quando viene richiamato su una radice del processore virtuale attivata.

Resource Manager usa le informazioni a livello di sottoscrizione come uno dei modi in cui determinare quando spostare le risorse tra le utilità di pianificazione.

Metodo IExecutionResource::GetExecutionResourceId

Restituisce un identificatore univoco per il thread hardware rappresentato da questa risorsa di esecuzione.

virtual unsigned int GetExecutionResourceId() const = 0;

Valore restituito

Identificatore univoco per il thread hardware sottostante questa risorsa di esecuzione.

Osservazioni:

A ogni thread hardware viene assegnato un identificatore univoco dal runtime di concorrenza. Se più risorse di esecuzione sono associate al thread hardware, avranno tutti lo stesso identificatore di risorsa di esecuzione.

Metodo IExecutionResource::GetNodeId

Restituisce un identificatore univoco per il nodo del processore a cui appartiene questa risorsa di esecuzione.

virtual unsigned int GetNodeId() const = 0;

Valore restituito

Identificatore univoco per un nodo del processore.

Osservazioni:

Il runtime di concorrenza rappresenta i thread hardware nel sistema in gruppi di nodi del processore. I nodi sono in genere derivati dalla topologia hardware del sistema. Ad esempio, tutti i processori in un socket specifico o un nodo NUMA specifico possono appartenere allo stesso nodo del processore. Resource Manager assegna identificatori univoci a questi nodi a partire da 0 e includendo nodeCount - 1, dove nodeCount rappresenta il numero totale di nodi del processore nel sistema.

Il numero di nodi può essere ottenuto dalla funzione GetProcessorNodeCount.

Metodo IExecutionResource::Remove

Restituisce questa risorsa di esecuzione a Resource Manager.

virtual void Remove(_Inout_ IScheduler* pScheduler) = 0;

Parametri

pScheduler
Interfaccia dell'utilità di pianificazione che effettua la richiesta di rimuovere questa risorsa di esecuzione.

Osservazioni:

Usare questo metodo per restituire risorse di esecuzione autonome e risorse di esecuzione associate alle radici del processore virtuale a Resource Manager.

Se si tratta di una risorsa di esecuzione autonoma ricevuta da uno dei metodi ISchedulerProxy::SubscribeCurrentThread o ISchedulerProxy::RequestInitialVirtualProcessors, la chiamata al metodo Remove terminerà la sottoscrizione thread creata per rappresentare la risorsa. È necessario terminare tutte le sottoscrizioni di thread prima di arrestare un proxy dell'utilità di pianificazione e chiamare Remove dal thread che ha creato la sottoscrizione.

Anche le radici del processore virtuale possono essere restituite a Gestione risorse richiamando il metodo Remove, poiché l'interfaccia IVirtualProcessorRoot eredita dall'interfaccia IExecutionResource. Potrebbe essere necessario restituire una radice del processore virtuale in risposta a una chiamata al metodo IScheduler::RemoveVirtualProcessors oppure quando viene eseguita una radice del processore virtuale sovrasubscritto ottenuta dal metodo ISchedulerProxy::CreateOversubscriber . Per le radici del processore virtuale, non esistono restrizioni per cui il thread può richiamare il Remove metodo.

invalid_argument viene generata se il parametro pScheduler è impostato su NULL.

invalid_operation viene generata se il parametro pScheduler è diverso dall'utilità di pianificazione per cui è stata creata questa risorsa di esecuzione o, con una risorsa di esecuzione autonoma, se il thread corrente è diverso dal thread che ha creato la sottoscrizione thread.

Vedi anche

Spazio dei nomi concurrency
Struttura IVirtualProcessorRoot