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.