Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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í základních prvků 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í Správce zdrojů, že plánovač je vypínán. 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 pomocí metody ISchedulerProxy::BindContext a ještě nebyl spuštěn jako pContext parametr při volání metody IThreadProxy::SwitchTo. |
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 provádění, které lze přiřadit 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í pomocí 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 pro proxy vlákna.
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, jež chcete přetížit.
Návratová hodnota
Rozhraní IVirtualProcessorRoot .
Poznámky
Použijte tuto metodu, když váš plánovač chce po omezenou dobu přetížit konkrétní hardwareové 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í.
Metoda ISchedulerProxy::RequestInitialVirtualProcessors
Vyžaduje počáteční přidělení základních prvků 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, zda se má sledovat aktuální vlákno a zohlednit jej při přidělování prostředků.
Návratová 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 zásad MinConcurrency, MaxConcurrency a TargetOversubscriptionFactor, aby určil, kolik hardwarových vláken se má nejprve přiřadit plánovači a kolik kořenů virtuálních procesorů 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 části 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í v rámci plánovače před návratem této metody.
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 .
Správce prostředků se při určování vybraných hardwarových vláken pokusí optimalizovat vazbu na uzly 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ě jsou jádra přidělených virtuálních procesorů umístěna na uzlu procesoru, na kterém běží aktuální vlákno, 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í Správce zdrojů, že plánovač je vypínán. 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 předtím, než se IExecutionResource::Remove plánovač vypne.
Pokud měl váš plánovač nějaké deaktivované kořeny virtuálních procesorů, musíte je aktivovat pomocí IVirtualProcessorRoot::Activate. Proxy vlákna, která na těchto procesorech běží, musí dokončit metodu kontextu spouštění, které odesílají, a poté můžete vyvolat 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
Rozhraní IExecutionResource představující aktuální vlákno v prostředí 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 k zabránění nadměrnému využití 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 volalo 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 pomocí metody ISchedulerProxy::BindContext a ještě nebyl spuštěn jako pContext parametr při volání metody IThreadProxy::SwitchTo.
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