IExecutionResource – struktura

Abstrakce hardwarového vlákna.

Syntaxe

struct IExecutionResource;

Členové

Veřejné metody

Název Popis
IExecutionResource::CurrentSubscriptionLevel Vrátí počet aktivovaných kořenových virtuálních procesorů a předplacených externích vláken aktuálně přidružených k podkladovému hardwarovému vláknu, které tento spouštěcí prostředek představuje.
IExecutionResource::GetExecutionResourceId Vrátí jedinečný identifikátor hardwarového vlákna, které tento spouštěcí prostředek představuje.
IExecutionResource::GetNodeId Vrátí jedinečný identifikátor pro uzel procesoru, do kterého tento spouštěcí prostředek patří.
IExecutionResource::Remove Vrátí tento spouštěcí prostředek do Resource Manageru.

Poznámky

Prostředky spouštění můžou být samostatné nebo přidružené ke kořenovým certifikátům virtuálního procesoru. Samostatný spouštěcí prostředek se vytvoří, když vlákno ve vaší aplikaci vytvoří odběr vlákna. Metody ISchedulerProxy::SubscribeThread a ISchedulerProxy::RequestInitialVirtualProcessors vytvářejí odběry vláken a vrací IExecutionResource rozhraní představující předplatné. Vytvoření předplatného vlákna je způsob, jak informovat Resource Manager, že se dané vlákno bude účastnit práce zařazené do plánovače spolu s kořeny virtuálního procesoru Resource Manager přiřazený plánovači. Resource Manager používá informace, aby se zabránilo nadměrnému odběru hardwarových vláken, kde může.

Hierarchie dědičnosti

IExecutionResource

Požadavky

Hlavička: concrtrm.h

Namespace: souběžnost

IExecutionResource::CurrentSubscriptionLevel – metoda

Vrátí počet aktivovaných kořenových virtuálních procesorů a předplacených externích vláken aktuálně přidružených k podkladovému hardwarovému vláknu, které tento spouštěcí prostředek představuje.

virtual unsigned int CurrentSubscriptionLevel() const = 0;

Návratová hodnota

Aktuální úroveň předplatného.

Poznámky

Úroveň předplatného vám řekne, kolik spuštěných vláken je přidruženo k hardwarovému vláknu. To zahrnuje pouze vlákna, o které Resource Manager ví ve formě předplacených vláken, a kořeny virtuálních procesorů, které aktivně spouštějí proxy vlákna.

Volání metody ISchedulerProxy::SubscribeCurrentThread nebo metody ISchedulerProxy::RequestInitialVirtualProcessors s parametrem doSubscribeCurrentThread nastaveným na hodnotu true zvýší úroveň předplatného hardwarového vlákna o jednu. Vrátí také IExecutionResource rozhraní představující předplatné. Odpovídající volání IExecutionResource::Remove dekrementuje úroveň předplatného hardwarového vlákna o jednu.

Aktivace kořenového adresáře virtuálního procesoru pomocí metody IVirtualProcessorRoot::Activate zvýší úroveň předplatného hardwarového vlákna o jednu. Metody IVirtualProcessorRoot::D eactivate nebo IExecutionResource::Remove dekrementují úroveň předplatného o jeden při vyvolání v aktivovaném kořenovém adresáři virtuálního procesoru.

Resource Manager používá informace na úrovni předplatného jako jeden ze způsobů, jak určit, kdy přesouvat prostředky mezi plánovači.

IExecutionResource::GetExecutionResourceId – metoda

Vrátí jedinečný identifikátor hardwarového vlákna, které tento spouštěcí prostředek představuje.

virtual unsigned int GetExecutionResourceId() const = 0;

Návratová hodnota

Jedinečný identifikátor hardwarového vlákna souvisejícího s tímto spouštěcím prostředkem.

Poznámky

Každému hardwarovému vláknu je přiřazen jedinečný identifikátor modulu Concurrency Runtime. Pokud je k hardwarovému vláknu přidruženo více spouštěcích prostředků, budou mít všechny stejný identifikátor spouštěcího prostředku.

IExecutionResource::GetNodeId – metoda

Vrátí jedinečný identifikátor pro uzel procesoru, do kterého tento spouštěcí prostředek patří.

virtual unsigned int GetNodeId() const = 0;

Návratová hodnota

Jedinečný identifikátor uzlu procesoru.

Poznámky

Concurrency Runtime představuje hardwarová vlákna v systému ve skupinách uzlů procesoru. Uzly jsou obvykle odvozené od hardwarové topologie systému. Například všechny procesory na konkrétním soketu nebo konkrétním uzlu NUMA můžou patřit do stejného uzlu procesoru. Resource Manager přiřadí těmto uzlům jedinečné identifikátory začínající 0 až do a včetně nodeCount - 1, kde nodeCount představuje celkový počet uzlů procesoru v systému.

Počet uzlů lze získat z funkce GetProcessorNodeCount.

IExecutionResource::Remove – metoda

Vrátí tento spouštěcí prostředek do Resource Manageru.

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

Parametry

pScheduler
Rozhraní plánovače, který požadavek na odebrání tohoto spouštěcího prostředku provede.

Poznámky

Tato metoda slouží k vrácení samostatných spouštěcích prostředků a spouštěcích prostředků přidružených ke kořenům virtuálního procesoru do Resource Manageru.

Pokud se jedná o samostatný spouštěcí prostředek, který jste obdrželi z některé z metod ISchedulerProxy::SubscribeCurrentThread nebo ISchedulerProxy::RequestInitialVirtualProcessors, volání metody Remove ukončí odběr vlákna, které prostředek byl vytvořen reprezentovat. Před vypnutím proxy plánovače musíte ukončit všechna předplatná vlákna a musíte volat Remove z vlákna, které předplatné vytvořilo.

Kořeny virtuálních procesorů lze také vrátit do Resource Manageru vyvoláním Remove metody, protože rozhraní IVirtualProcessorRoot dědí z IExecutionResource rozhraní. Možná budete muset vrátit kořen virtuálního procesoru buď v reakci na volání IScheduler::RemoveVirtualProcessors metoda, nebo po dokončení s přepsaným kořenem virtuálního procesoru, který jste získali z metody ISchedulerProxy::CreateOversubscriber . Pro kořeny virtuálních procesorů neexistují žádná omezení, která vlákno může vyvolat metodu Remove .

invalid_argument je vyvolán, pokud je parametr pScheduler nastaven na NULL.

invalid_operation je vyvolána, pokud se parametr pScheduler liší od plánovače, pro který byl vytvořen tento spouštěcí prostředek, nebo s samostatným spouštěcím prostředkem, pokud se aktuální vlákno liší od vlákna, které vytvořilo odběr vlákna.

Viz také

concurrency – obor názvů
IVirtualProcessorRoot – struktura