Freigeben über


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.

Siehe auch

Concurrency-Namespace
IVirtualProcessorRoot-Struktur