IExecutionResource-Struktur
Eine Abstraktion für einen Hardwarethread.
Syntax
struct IExecutionResource;
Member
Öffentliche Methoden
Name | Beschreibung |
---|---|
IExecutionResource::CurrentSubscriptionLevel | Gibt die Anzahl der aktivierten virtuellen Prozessorwurzeln und abonnierten externen Threads zurück, die derzeit dem zugrunde liegenden Hardwarethread zugeordnet sind, die diese Ausführungsressource darstellt. |
IExecutionResource::GetExecutionResourceId | Gibt einen eindeutigen Bezeichner für den Hardwarethread zurück, den diese Ausführungsressource darstellt. |
IExecutionResource::GetNodeId | Gibt einen eindeutigen Bezeichner für den Prozessorknoten zurück, zu dem diese Ausführungsressource gehört. |
IExecutionResource::Remove | Gibt diese Ausführungsressource an den Ressourcen-Manager zurück. |
Hinweise
Ausführungsressourcen können eigenständig oder mit virtuellen Prozessorwurzeln verknüpft sein. Eine eigenständige Ausführungsressource wird erstellt, wenn ein Thread in Ihrer Anwendung ein Threadabonnement erstellt. Die Methoden ISchedulerProxy::SubscribeThread und ISchedulerProxy::RequestInitialVirtualProcessors erstellen Threadabonnements und geben eine IExecutionResource
Schnittstelle zurück, die das Abonnement darstellt. Das Erstellen eines Threadabonnements ist eine Möglichkeit, den Ressourcen-Manager darüber zu informieren, dass ein bestimmter Thread an der Arbeitswarteschlange an einem Planer teilnimmt, zusammen mit dem Ressourcen-Manager des virtuellen Prozessors, der dem Planer zugewiesen wird. Der Ressourcen-Manager verwendet die Informationen, um zu vermeiden, dass Hardwarethreads überschreiben, wo dies möglich ist.
Vererbungshierarchie
IExecutionResource
Anforderungen
Kopfzeile: concrtrm.h
Namespace: Parallelität
IExecutionResource::CurrentSubscriptionLevel-Methode
Gibt die Anzahl der aktivierten virtuellen Prozessorwurzeln und abonnierten externen Threads zurück, die derzeit dem zugrunde liegenden Hardwarethread zugeordnet sind, die diese Ausführungsressource darstellt.
virtual unsigned int CurrentSubscriptionLevel() const = 0;
Rückgabewert
Die aktuelle Abonnementebene.
Hinweise
Auf der Abonnementebene erfahren Sie, wie viele ausgeführte Threads dem Hardwarethread zugeordnet sind. Dies umfasst nur Threads, die der Ressourcen-Manager in Form von abonnierten Threads und virtuellen Prozessorwurzeln kennt, die Threadproxys aktiv ausführen.
Aufrufen der Methode "ISchedulerProxy::SubscribeCurrentThread" oder der Methode "ISchedulerProxy::RequestInitialVirtualProcessors " mit dem Parameter doSubscribeCurrentThread
, der auf den Wert true
festgelegt ist, erhöht die Abonnementebene eines Hardwarethreads um eins. Sie geben auch eine IExecutionResource
Schnittstelle zurück, die das Abonnement darstellt. Ein entsprechender Aufruf der IExecutionResource::Remove erhöht die Abonnementebene des Hardwarethreads um eins.
Der Akt der Aktivierung eines virtuellen Prozessorstamms mithilfe der Methode "IVirtualProcessorRoot::Activate " erhöht die Abonnementebene eines Hardwarethreads um eins. Die Methoden "IVirtualProcessorRoot::D eactivate" oder "IExecutionResource::Remove decrement the subscription level by one" when invoked on an activated virtual processor root.
Der Ressourcen-Manager verwendet Informationen auf Abonnementebene als eine der Möglichkeiten, wie Sie bestimmen können, wann Ressourcen zwischen Planern verschoben werden sollen.
IExecutionResource::GetExecutionResourceId-Methode
Gibt einen eindeutigen Bezeichner für den Hardwarethread zurück, den diese Ausführungsressource darstellt.
virtual unsigned int GetExecutionResourceId() const = 0;
Rückgabewert
Ein eindeutiger Bezeichner für den Hardwarethread, der dieser Ausführungsressource zugrunde liegt.
Hinweise
Jedem Hardwarethread wird ein eindeutiger Bezeichner durch die Concurrency Runtime zugewiesen. Wenn mehrere Ausführungsressourcen hardwarethread zugeordnet sind, verfügen sie alle über denselben Ausführungsressourcenbezeichner.
IExecutionResource::GetNodeId-Methode
Gibt einen eindeutigen Bezeichner für den Prozessorknoten zurück, zu dem diese Ausführungsressource gehört.
virtual unsigned int GetNodeId() const = 0;
Rückgabewert
Ein eindeutiger Bezeichner für einen Prozessorknoten.
Hinweise
Die Parallelitäts-Runtime stellt Hardwarethreads auf dem System in Gruppen von Prozessorknoten dar. Knoten werden in der Regel von der Hardwaretopologie des Systems abgeleitet. Beispielsweise gehören alle Prozessoren auf einem bestimmten Socket oder einem bestimmten NUMA-Knoten zum gleichen Prozessorknoten. Der Ressourcen-Manager weist diesen Knoten eindeutige Bezeichner zu, beginnend mit 0
bis zu und einschließlich nodeCount - 1
, wobei nodeCount
die Gesamtanzahl der Prozessorknoten im System darstellt.
Die Anzahl der Knoten kann aus der Funktion GetProcessorNodeCount abgerufen werden.
IExecutionResource::Remove-Methode
Gibt diese Ausführungsressource an den Ressourcen-Manager zurück.
virtual void Remove(_Inout_ IScheduler* pScheduler) = 0;
Parameter
pScheduler
Eine Schnittstelle zum Scheduler, der die Anforderung zum Entfernen dieser Ausführungsressource vornimmt.
Hinweise
Verwenden Sie diese Methode, um eigenständige Ausführungsressourcen sowie Ausführungsressourcen zurückzugeben, die virtuellen Prozessorwurzeln zugeordnet sind, an den Ressourcen-Manager.
Wenn es sich um eine eigenständige Ausführungsressource handelt, die Sie von einer der Methoden "ISchedulerProxy::SubscribeCurrentThread " oder "ISchedulerProxy::RequestInitialVirtualProcessors" erhalten haben, endet das Aufrufen der Methode Remove
mit dem Threadabonnement, das die Ressource darstellt. Sie müssen alle Threadabonnements beenden, bevor Sie einen Planerproxy herunterfahren und vom Thread aufrufen Remove
, der das Abonnement erstellt hat.
Auch virtuelle Prozessorwurzeln können durch Aufrufen der Remove
Methode an den Ressourcen-Manager zurückgegeben werden, da die Schnittstelle IVirtualProcessorRoot
von der IExecutionResource
Schnittstelle erbt. Möglicherweise müssen Sie als Reaktion auf einen Aufruf der IScheduler::RemoveVirtualProcessors-Methode einen virtuellen Prozessorstamm zurückgeben oder wenn Sie mit einem überschriebenen virtuellen Prozessorstamm fertig sind, den Sie aus der ISchedulerProxy::CreateOversubscriber-Methode abgerufen haben. Für virtuelle Prozessorwurzeln gibt es keine Einschränkungen, für die der Thread die Remove
Methode aufrufen kann.
invalid_argument
wird ausgelöst, wenn der Parameter pScheduler
auf NULL
.
invalid_operation
wird ausgelöst, wenn sich der Parameter pScheduler
vom Zeitplaner unterscheidet, für den diese Ausführungsressource erstellt wurde, oder mit einer eigenständigen Ausführungsressource, wenn sich der aktuelle Thread vom Thread unterscheidet, der das Threadabonnement erstellt hat.