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.