Sdílet prostřednictvím


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

Jméno 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.

Vrácená 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ů.

Vrácená hodnota

Rozhraní IExecutionResource pro aktuální vlákno, pokud má parametr doSubscribeCurrentThread hodnotu true. Pokud je falsehodnota , 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 MinConcurrencyMaxConcurrency 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;

Vrácená 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