Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
De interface waarmee schedulers communiceren met de Resource Manager van de Concurrency Runtime om te onderhandelen over resourcetoewijzing.
Syntaxis
struct ISchedulerProxy;
Leden
Openbare methoden
| Naam | Description |
|---|---|
| ISchedulerProxy::BindContext | Koppelt een uitvoeringscontext aan een thread proxy als deze nog niet aan een thread proxy gekoppeld is. |
| ISchedulerProxy::CreateOversubscriber | Hiermee wordt een nieuwe virtuele processorwortel gemaakt op de hardwarethread die is gekoppeld aan een bestaande uitvoeringsresource. |
| ISchedulerProxy::RequestInitialVirtualProcessors | Vraagt een eerste toewijzing van virtuele processorwortels aan. Elke virtuele processorkern vertegenwoordigt de mogelijkheid om één thread uit te voeren die werk voor de scheduler verricht. |
| ISchedulerProxy::Shutdown | Hiermee wordt de Resource Manager op de hoogte gesteld dat de scheduler wordt afgesloten. Hierdoor worden alle resources die aan de planner zijn verleend, door Resource Manager onmiddellijk vrijgemaakt. |
| ISchedulerProxy::SubscribeCurrentThread | Registreert de huidige thread met Resource Manager, waarbij deze wordt gekoppeld aan deze planner. |
| ISchedulerProxy::UnbindContext | Koppelt een threadproxy los van de uitvoeringscontext die is opgegeven door de pContext parameter en retourneert deze naar de gratis pool van de threadproxyfactory. Deze methode kan alleen worden aangeroepen in een uitvoeringscontext die is gebonden via de methode ISchedulerProxy::BindContext en is nog niet gestart via de pContext parameter van een IThreadProxy::SwitchTo-methodeaanroep . |
Opmerkingen
Resource Manager geeft een ISchedulerProxy interface aan elke scheduler die zich bij hem registreert met behulp van de methode IResourceManager::RegisterScheduler.
Overnamehiërarchie
ISchedulerProxy
Requirements
Koptekst: concrtrm.h
Naamruimte: concurrentie
ISchedulerProxy::BindContext-methode
Koppelt een uitvoeringscontext aan een thread-proxy, als er nog geen is gekoppeld.
virtual void BindContext(_Inout_ IExecutionContext* pContext) = 0;
Parameterwaarden
pContext
Een interface voor de uitvoeringscontext die moet worden gekoppeld aan een thread-proxy.
Opmerkingen
Normaal gesproken verbindt de methode IThreadProxy::SwitchTo een threadproxy aan een uitvoeringscontext op aanvraag. Er zijn echter omstandigheden waarin het noodzakelijk is om vooraf een context te binden om ervoor te zorgen dat de SwitchTo methode overschakelt naar een al gebonden context. Dit is het geval in een UMS-planningscontext omdat er geen methoden kunnen worden aangeroepen die geheugen toewijzen, en het binden van een threadproxy kan geheugentoewijzing omvatten als een threadproxy niet direct beschikbaar is in de gratis pool van de threadproxyfactory.
invalid_argument wordt gegenereerd als de parameter pContext de waarde NULLheeft.
De methode ISchedulerProxy::CreateOversubscriber
Hiermee maakt u een nieuwe virtuele processorwortel op de hardwarethread die is gekoppeld aan een bestaande uitvoeringsresource.
virtual IVirtualProcessorRoot* CreateOversubscriber(_Inout_ IExecutionResource* pExecutionResource) = 0;
Parameterwaarden
pExecutionResource
Een IExecutionResource interface die de hardwarethread vertegenwoordigt die u wilt overschrijven.
Retourwaarde
Een IVirtualProcessorRoot interface.
Opmerkingen
Gebruik deze methode wanneer uw planner een bepaalde hardwarethread gedurende een beperkte tijd wil overbelasten. Zodra u klaar bent met de virtuele processorroot, moet u deze teruggeven aan de resourcemanager door de methode Remove aan te roepen op de IVirtualProcessorRoot-interface.
U kunt zelfs meer virtuele processorkernen toewijzen dan er fysiek beschikbaar zijn, omdat de IVirtualProcessorRoot-interface afgeleid is van de IExecutionResource-interface.
methode ISchedulerProxy::RequestInitialVirtualProcessors
Vraagt een eerste toewijzing van virtuele processorwortels aan. Elke virtuele processorwortel vertegenwoordigt de mogelijkheid waarmee één thread kan worden uitgevoerd die werk voor de scheduler verricht.
virtual IExecutionResource* RequestInitialVirtualProcessors(bool doSubscribeCurrentThread) = 0;
Parameterwaarden
doSubscribeCurrentThread
Of u de huidige thread wilt aanmelden en het tijdens de resourcetoewijzing in overweging wilt nemen.
Retourwaarde
De IExecutionResource interface voor de huidige thread, als de parameter doSubscribeCurrentThread de waarde trueheeft. Als de waarde is false, retourneert de methode NULL.
Opmerkingen
Voordat een scheduler werk uitvoert, moet deze methode worden gebruikt om virtuele processorwortels aan te vragen bij Resource Manager. Resource Manager krijgt toegang tot het beleid van de planner met behulp van IScheduler::GetPolicy en gebruikt de waarden voor de beleidssleutels MinConcurrencyMaxConcurrency en TargetOversubscriptionFactor om te bepalen hoeveel hardwarethreads moeten worden toegewezen aan de scheduler in eerste instantie en hoeveel virtuele processorwortels voor elke hardwarethread moeten worden gemaakt. Zie PolicyElementKey voor meer informatie over hoe scheduler-beleidsregels worden gebruikt om de initiële toewijzing van een planner te bepalen.
Resource Manager verleent resources aan een planner door de methode IScheduler::AddVirtualProcessors aan te roepen met een lijst met virtuele processorwortels. De methode wordt aangeroepen als een callback naar de scheduler voordat deze methode terugkeert.
Als de planner abonnement voor de huidige thread heeft aangevraagd door de parameter doSubscribeCurrentThread in te true stellen, retourneert de methode een IExecutionResource-interface. Het abonnement moet op een later tijdstip worden beëindigd met behulp van de methode IExecutionResource::Remove .
Bij het bepalen welke hardware-threads zijn geselecteerd, probeert de Resource Manager te optimaliseren voor processor-knooppunt-affiniteit. Als een abonnement wordt aangevraagd voor de huidige thread, is het een indicatie dat de huidige thread voornemens is deel te nemen aan het werk dat aan deze planner is toegewezen. In dat geval bevinden de toegewezen virtuele processorwortels zich op het processorknooppunt waarop de huidige thread draait, indien mogelijk.
De handeling van het abonneren van een thread verhoogt het abonnementsniveau van de onderliggende hardwarethread met één. Het abonnementsniveau wordt met één verlaagd wanneer het abonnement wordt beëindigd. Zie IExecutionResource::CurrentSubscriptionLevel voor meer informatie over abonnementsniveaus.
Methode ISchedulerProxy::Shutdown
Hiermee wordt de Resource Manager op de hoogte gesteld dat de scheduler wordt afgesloten. Hierdoor worden alle resources die aan de planner zijn verleend, door Resource Manager onmiddellijk vrijgemaakt.
virtual void Shutdown() = 0;
Opmerkingen
Alle IExecutionContext interfaces die de scheduler heeft ontvangen als resultaat van het abonneren op een externe thread met behulp van de methoden ISchedulerProxy::RequestInitialVirtualProcessors of ISchedulerProxy::SubscribeCurrentThread, moeten met IExecutionResource::Remove worden teruggegeven aan de Resource Manager voordat een scheduler zichzelf afsluit.
Als uw planner gedeactiveerde virtuele processorroots had, moet u deze activeren met behulp van IVirtualProcessorRoot::Activate en zorgen dat de threadproxy's die hierop worden uitgevoerd, de Dispatch methode van de uitvoeringscontexten die zij aanroepen verlaten voordat u Shutdown op een scheduler-proxy aanroept.
Het is niet nodig dat de scheduler alle virtuele processorwortels die de Resource Manager eraan heeft verleend, afzonderlijk retourneert via aanroepen naar de Remove-methode, omdat alle virtuele processorwortels bij afsluiting aan de Resource Manager worden geretourneerd.
Methode ISchedulerProxy::SubscribeCurrentThread
Registreert de huidige thread met Resource Manager, waarbij deze wordt gekoppeld aan deze planner.
virtual IExecutionResource* SubscribeCurrentThread() = 0;
Retourwaarde
De IExecutionResource interface die de huidige thread in de runtime vertegenwoordigt.
Opmerkingen
Gebruik deze methode als u wilt dat Resource Manager rekening houdt met de huidige thread terwijl u resources toedeelt aan uw planner en andere planners. Het is vooral handig wanneer de thread van plan is om deel te nemen aan het werk dat in de wachtrij staat voor uw scheduler, samen met de virtuele processor-roots die de scheduler ontvangt van de Resource Manager. Resource Manager gebruikt informatie om onnodige overcommittering van hardwarethreads op het systeem te voorkomen.
De uitvoeringsresource die via deze methode wordt ontvangen, moet worden geretourneerd naar Resource Manager met behulp van de methode IExecutionResource::Remove . De thread die de Remove methode aanroept, moet dezelfde thread zijn die eerder de SubscribeCurrentThread methode heeft aangeroepen.
De handeling van het abonneren van een thread verhoogt het abonnementsniveau van de onderliggende hardwarethread met één. Het abonnementsniveau wordt met één verlaagd wanneer het abonnement wordt beëindigd. Zie IExecutionResource::CurrentSubscriptionLevel voor meer informatie over abonnementsniveaus.
Methode ISchedulerProxy::UnbindContext
Koppelt een threadproxy los van de uitvoeringscontext die is opgegeven door de pContext parameter en retourneert deze naar de gratis pool van de threadproxyfactory. Deze methode kan alleen worden aangeroepen in een uitvoeringscontext die is gebonden via de methode ISchedulerProxy::BindContext en is nog niet gestart via de pContext parameter van een IThreadProxy::SwitchTo-methodeaanroep .
virtual void UnbindContext(_Inout_ IExecutionContext* pContext) = 0;
Parameterwaarden
pContext
De uitvoeringscontext voor het loskoppelen van de threadproxy.
Zie ook
concurrentie Namespace
IScheduler-structuur
Structuur IThreadProxy
Structuur IVirtualProcessorRoot
IResourceManager-structuur