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.
Een abstractie voor een hardwarethread.
Syntaxis
struct IExecutionResource;
Leden
Openbare methoden
| Naam | Description |
|---|---|
| IExecutionResource::CurrentSubscriptionLevel | Retourneert het aantal geactiveerde virtuele processorwortels en geabonneerde externe threads die momenteel zijn gekoppeld aan de onderliggende hardwarethread die deze uitvoeringsresource vertegenwoordigt. |
| IExecutionResource::GetExecutionResourceId | Retourneert een unieke id voor de hardwarethread die deze uitvoeringsresource vertegenwoordigt. |
| IExecutionResource::GetNodeId | Retourneert een unieke id voor het processorknooppunt waartoe deze uitvoeringsresource behoort. |
| IExecutionResource::Remove | Retourneert deze uitvoeringsresource naar Resource Manager. |
Opmerkingen
Uitvoeringsbronnen kunnen zelfstandig zijn of zijn gekoppeld aan de hoofdmappen van de virtuele processor. Er wordt een zelfstandige uitvoeringsresource gemaakt wanneer een thread in uw toepassing een threadabonnement maakt. De methoden ISchedulerProxy::SubscribeThread en ISchedulerProxy::RequestInitialVirtualProcessors maken threadabonnementen en retourneren een IExecutionResource interface die het abonnement vertegenwoordigt. Het maken van een draadabonnement is een manier om de Resource Manager te informeren dat een bepaalde draad zal deelnemen aan het werk dat in de wachtrij staat voor een planner, samen met de virtuele processorroots die de Resource Manager aan de planner toewijst. Resource Manager gebruikt de informatie om te voorkomen dat hardwarethreads overbelast worden, waar mogelijk.
Overnamehiërarchie
IExecutionResource
Requirements
Koptekst: concrtrm.h
Naamruimte: concurrentie
Methode IExecutionResource::CurrentSubscriptionLevel
Retourneert het aantal geactiveerde virtuele processorwortels en geabonneerde externe threads die momenteel zijn gekoppeld aan de onderliggende hardwarethread die deze uitvoeringsresource vertegenwoordigt.
virtual unsigned int CurrentSubscriptionLevel() const = 0;
Retourwaarde
Het huidige abonnementsniveau.
Opmerkingen
Op abonnementsniveau wordt aangegeven hoeveel actieve threads aan de hardwarethread zijn gekoppeld. Dit omvat alleen threads waarvan Resource Manager op de hoogte is in de vorm van geabonneerde threads en virtuele processorhoofdmappen die threadproxy's actief uitvoeren.
De methode ISchedulerProxy aanroepen::SubscribeCurrentThread of de methode ISchedulerProxy::RequestInitialVirtualProcessors waarbij de parameter doSubscribeCurrentThread is ingesteld op de waarde true , wordt het abonnementsniveau van een hardwarethread met één verhoogd. Ze retourneren ook een IExecutionResource interface die het abonnement vertegenwoordigt. Een bijbehorende aanroep naar de IExecutionResource::Verwijder degradeert het abonnementsniveau van de hardwarethread met één.
Het activeren van een root van een virtuele processor met behulp van de methode IVirtualProcessorRoot::Activate verhoogt het abonnementsniveau van een hardware-thread met één. De methoden IVirtualProcessorRoot::Deactivate of IExecutionResource::Remove verlagen het abonnementsniveau met één wanneer ze worden aangeroepen op een geactiveerde virtuele processorwortel.
Resource Manager gebruikt informatie op abonnementsniveau als een van de manieren waarop u kunt bepalen wanneer resources tussen planners moeten worden verplaatst.
Methode IExecutionResource::GetExecutionResourceId
Retourneert een unieke id voor de hardwarethread die deze uitvoeringsresource vertegenwoordigt.
virtual unsigned int GetExecutionResourceId() const = 0;
Retourwaarde
Een unieke identificator voor de hardwarethread die onderliggend is aan deze uitvoeringsresource.
Opmerkingen
Aan elke hardwarethread wordt een unieke id toegewezen door de Gelijktijdigheidsruntime. Als er meerdere uitvoeringsresources aan hardwarethread zijn gekoppeld, hebben ze allemaal dezelfde resource-id voor de uitvoering.
Methode IExecutionResource::GetNodeId
Retourneert een unieke id voor het processorknooppunt waartoe deze uitvoeringsresource behoort.
virtual unsigned int GetNodeId() const = 0;
Retourwaarde
Een unieke id voor een processorknooppunt.
Opmerkingen
De "Concurrency Runtime" vertegenwoordigt hardwarethreads op het systeem in groepen van processorknooppunten. Knooppunten worden meestal afgeleid van de hardwaretopologie van het systeem. Alle processors op een specifieke socket of een specifiek NUMA-knooppunt kunnen bijvoorbeeld tot hetzelfde processorknooppunt behoren. Resource Manager wijst unieke id's toe aan deze knooppunten, beginnend met 0 en inclusief nodeCount - 1, waarbij nodeCount het totale aantal processorknooppunten op het systeem wordt aangegeven.
Het aantal knooppunten kan worden verkregen uit de functie GetProcessorNodeCount.
Methode IExecutionResource::Remove
Retourneert deze uitvoeringsresource naar Resource Manager.
virtual void Remove(_Inout_ IScheduler* pScheduler) = 0;
Parameterwaarden
pScheduler
Een interface voor de planner die de aanvraag indient om deze uitvoeringsresource te verwijderen.
Opmerkingen
Gebruik deze methode om zelfstandige uitvoeringsresources en uitvoeringsresources die zijn gekoppeld aan de virtuele processorwortels naar de Resource Manager te retourneren.
Als dit een zelfstandige uitvoeringsresource is die u hebt ontvangen van een van de methoden ISchedulerProxy::SubscribeCurrentThread of ISchedulerProxy::RequestInitialVirtualProcessors, dan zal het aanroepen van de methode Remove het threadabonnement beëindigen waarvoor de resource is aangemaakt. U moet alle threadabonnementen beëindigen voordat u een scheduler-proxy afsluit en moet aanroepen Remove vanuit de thread die het abonnement heeft gemaakt.
Virtuele processorwortels kunnen ook worden geretourneerd naar Resource Manager door de Remove methode aan te roepen, omdat de interface IVirtualProcessorRoot wordt overgenomen van de IExecutionResource interface. Mogelijk moet u een hoofdmap van een virtuele processor retourneren als reactie op een aanroep naar de methode IScheduler::RemoveVirtualProcessors of wanneer u klaar bent met een oversubscribeerde virtuele processorhoofdmap die u hebt verkregen via de methode ISchedulerProxy::CreateOversubscriber . Voor virtuele processorwortels gelden geen beperkingen voor welke thread de Remove methode kan aanroepen.
invalid_argument wordt gegenereerd als de parameter pScheduler is ingesteld op NULL.
invalid_operation wordt gegenereerd als de parameter pScheduler verschilt van de scheduler waarvoor deze uitvoeringsresource is gemaakt, of, met een zelfstandige uitvoeringsresource, als de huidige thread verschilt van de thread die het threadabonnement heeft gemaakt.