ISchedulerProxy – struktura
Rozhraní, pomocí kterého plánovači komunikují s Resource Managerem concurrency Runtime a vyjednávají přidělení prostředků.
Syntaxe
struct ISchedulerProxy;
Členové
Veřejné metody
Název | Popis |
---|---|
ISchedulerProxy::BindContext | Přidruží kontext spuštění k proxy vláknu, pokud ještě není přidružený k jednomu z nich. |
ISchedulerProxy::CreateOversubscriber | Vytvoří nový kořenový adresář virtuálního procesoru na hardwarovém vlákně přidruženém k existujícímu spouštěcímu prostředku. |
ISchedulerProxy::RequestInitialVirtualProcessors | Vyžaduje počáteční přidělení kořenových certifikátů virtuálního procesoru. Každý kořen virtuálního procesoru představuje možnost spustit jedno vlákno, které může provádět práci pro plánovač. |
ISchedulerProxy::Shutdown | Upozorní Resource Manager, že plánovač vypne. To způsobí, že Resource Manager okamžitě uvolní všechny prostředky udělené plánovači. |
ISchedulerProxy::SubscribeCurrentThread | Zaregistruje aktuální vlákno pomocí Resource Manageru a přidružuje ho k tomuto plánovači. |
ISchedulerProxy::UnbindContext | Zruší přidružení proxy vlákna z kontextu spuštění určeného pContext parametrem a vrátí ho do bezplatného fondu proxy vláken. Tato metoda může být volána pouze v kontextu spuštění, který byl vázán prostřednictvím ISchedulerProxy::BindContext metoda a ještě nebyl spuštěn prostřednictvím pContext parametru volání IThreadProxy::SwitchTo volání metody. |
Poznámky
Resource Manager předává ISchedulerProxy
rozhraní každému plánovači, který se k němu registruje pomocí metody IResourceManager::RegisterScheduler .
Hierarchie dědičnosti
ISchedulerProxy
Požadavky
Hlavička: concrtrm.h
Obor názvů: souběžnost
ISchedulerProxy::BindContext – metoda
Přidruží kontext spuštění k proxy vláknu, pokud ještě není přidružený k jednomu z nich.
virtual void BindContext(_Inout_ IExecutionContext* pContext) = 0;
Parametry
pContext
Rozhraní kontextu spuštění, které se přidruží k proxy vláknu.
Poznámky
Za normálních okolností metoda IThreadProxy::SwitchTo vytvoří vazbu proxy vlákna na kontext spuštění na vyžádání. Existují však okolnosti, kdy je nutné předem svázat kontext, aby se zajistilo, že SwitchTo
metoda přepne do již vázaného kontextu. Jedná se o případ v kontextu plánování služby UMS, protože nemůže volat metody, které přidělují paměť, a vazba proxy vlákna může zahrnovat přidělení paměti, pokud proxy vlákna není snadno k dispozici ve volném fondu továrny proxy vláken.
invalid_argument
je vyvolán, pokud má parametr pContext
hodnotu NULL
.
ISchedulerProxy::CreateOversubscriber – metoda
Vytvoří nový kořenový adresář virtuálního procesoru na hardwarovém vlákně přidruženém k existujícímu spouštěcímu prostředku.
virtual IVirtualProcessorRoot* CreateOversubscriber(_Inout_ IExecutionResource* pExecutionResource) = 0;
Parametry
pExecutionResource
Rozhraní IExecutionResource
, které představuje hardwarové vlákno, které chcete přepsat.
Návratová hodnota
Rozhraní IVirtualProcessorRoot
.
Poznámky
Tuto metodu použijte, když plánovač chce po omezenou dobu přepsat konkrétní hardwarové vlákno. Jakmile budete hotovi s kořenem virtuálního procesoru, měli byste ho vrátit správci prostředků voláním metody Remove v IVirtualProcessorRoot
rozhraní.
Můžete dokonce přepsat existující kořen virtuálního procesoru, protože IVirtualProcessorRoot
rozhraní dědí z IExecutionResource
rozhraní.
ISchedulerProxy::RequestInitialVirtualProcessors – metoda
Vyžaduje počáteční přidělení kořenových certifikátů virtuálního procesoru. Každý kořen virtuálního procesoru představuje možnost spustit jedno vlákno, které může provádět práci pro plánovač.
virtual IExecutionResource* RequestInitialVirtualProcessors(bool doSubscribeCurrentThread) = 0;
Parametry
doSubscribeCurrentThread
Určuje, jestli se má přihlásit k odběru aktuálního vlákna a účet pro něj během přidělování prostředků.
Návratová hodnota
Rozhraní IExecutionResource
pro aktuální vlákno, pokud má parametr doSubscribeCurrentThread
hodnotu true
. Pokud je false
hodnota , metoda vrátí hodnotu NULL.
Poznámky
Před provedením jakékoli práce plánovače by měl tuto metodu použít k vyžádání kořenových certifikátů virtuálního procesoru z Resource Manageru. Resource Manager získá přístup k zásadám plánovače pomocí IScheduler::GetPolicy a použije hodnoty pro klíče MinConcurrency
MaxConcurrency
zásad a TargetOversubscriptionFactor
určí, kolik hardwarových vláken se má nejprve přiřadit plánovači a kolik kořenových certifikátů virtuálního procesoru se má vytvořit pro každé hardwarové vlákno. Další informace o tom, jak se zásady plánovače používají k určení počátečního přidělení plánovače, najdete v tématu PolicyElementKey.
Resource Manager uděluje prostředky plánovači voláním metody IScheduler::AddVirtualProcessors se seznamem kořenových virtuálních procesorů. Metoda je vyvolána jako zpětné volání do plánovače předtím, než tato metoda vrátí.
Pokud plánovač požadoval předplatné pro aktuální vlákno nastavením parametru doSubscribeCurrentThread
na true
, metoda vrátí IExecutionResource
rozhraní. Předplatné se musí ukončit později pomocí metody IExecutionResource::Remove .
Při určování vybraných hardwarových vláken se Resource Manager pokusí optimalizovat spřažení uzlů procesoru. Pokud je pro aktuální vlákno požadováno předplatné, znamená to, že aktuální vlákno hodlá účastnit práce přiřazené tomuto plánovači. V takovém případě se přidělené kořeny virtuálních procesorů nacházejí v uzlu procesoru, na který se aktuální vlákno provádí, pokud je to možné.
Přihlášení k odběru vlákna zvyšuje úroveň předplatného základního hardwarového vlákna o jednu. Úroveň předplatného se po ukončení předplatného zmenší o jednu. Další informace o úrovních předplatného najdete v tématu IExecutionResource::CurrentSubscriptionLevel.
ISchedulerProxy::Shutdown – metoda
Upozorní Resource Manager, že plánovač vypne. To způsobí, že Resource Manager okamžitě uvolní všechny prostředky udělené plánovači.
virtual void Shutdown() = 0;
Poznámky
Všechna IExecutionContext
rozhraní, která plánovač obdržel v důsledku přihlášení k odběru externího vlákna pomocí metod ISchedulerProxy::RequestInitialVirtualProcessors
nebo ISchedulerProxy::SubscribeCurrentThread
musí být vrácena do Resource Manageru, než IExecutionResource::Remove
se plánovač vypne.
Pokud měl plánovač deaktivované kořeny virtuálních procesorů, musíte je aktivovat pomocí IVirtualProcessorRoot::Activate a nechat na nich Dispatch
spuštěné proxy vlákna nechat metodu kontextů spouštění, které odesílá, než vyvoláte Shutdown
na proxy plánovače.
Plánovač nemusí jednotlivě vracet všechny kořeny virtuálního procesoru, které mu Správce prostředků udělil prostřednictvím volání Remove
metody, protože všechny kořeny virtuálních procesorů se vrátí do Resource Manageru při vypnutí.
ISchedulerProxy::SubscribeCurrentThread – metoda
Zaregistruje aktuální vlákno pomocí Resource Manageru a přidružuje ho k tomuto plánovači.
virtual IExecutionResource* SubscribeCurrentThread() = 0;
Návratová hodnota
Propojení IExecutionResource
představující aktuální vlákno v modulu runtime.
Poznámky
Tuto metodu použijte, pokud chcete, aby Resource Manager zohlednil aktuální vlákno a přiděloval prostředky plánovači a dalším plánovačům. Je zvlášť užitečné, když se vlákno plánuje účastnit práce zařazené do fronty plánovači spolu s kořeny virtuálního procesoru, které plánovač obdrží z Resource Manageru. Resource Manager používá informace, aby se zabránilo zbytečnému přesunutí hardwarových vláken v systému.
Spouštěcí prostředek přijatý touto metodou by se měl vrátit do Resource Manageru pomocí metody IExecutionResource::Remove . Vlákno, které volá metodu Remove
, musí být stejné vlákno, které dříve volal metodu SubscribeCurrentThread
.
Přihlášení k odběru vlákna zvyšuje úroveň předplatného základního hardwarového vlákna o jednu. Úroveň předplatného se po ukončení předplatného zmenší o jednu. Další informace o úrovních předplatného najdete v tématu IExecutionResource::CurrentSubscriptionLevel.
ISchedulerProxy::UnbindContext – metoda
Zruší přidružení proxy vlákna z kontextu spuštění určeného pContext
parametrem a vrátí ho do bezplatného fondu proxy vláken. Tato metoda může být volána pouze v kontextu spuštění, který byl vázán prostřednictvím ISchedulerProxy::BindContext metoda a ještě nebyl spuštěn prostřednictvím pContext
parametru volání IThreadProxy::SwitchTo volání metody.
virtual void UnbindContext(_Inout_ IExecutionContext* pContext) = 0;
Parametry
pContext
Kontext spuštění pro zrušení přidružení od proxy vlákna.
Viz také
concurrency – obor názvů
IScheduler – struktura
IThreadProxy – struktura
IVirtualProcessorRoot – struktura
IResourceManager – struktura