Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Eine Abstraktion für einen Hardwarethread.
Syntax
struct IExecutionResource;
Mitglieder
Ö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, dem Ressourcen-Manager mitzuteilen, dass ein bestimmter Thread an der Arbeit in der Warteschlange eines Planers beteiligt sein wird, zusammen mit den virtuellen Prozessor-Wurzeln, die der Ressourcen-Manager dem Planer zuweist. Der Ressourcen-Manager verwendet die Informationen, um zu vermeiden, dass Hardware-Threads überbucht werden, wo immer 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 verringert 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::Deactivate oder IExecutionResource::Remove verringern das Abonnementniveau um eins, wenn sie auf einer aktivierten virtuellen Prozessorwurzel aufgerufen werden.
Der Ressourcen-Manager verwendet Informationen auf Abonnementebene als eine der Möglichkeiten, um zu bestimmen, wann Ressourcen zwischen Scheduler 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 Thread-Abonnements beenden, bevor Sie einen Planerproxy herunterfahren und Remove von dem Thread aufrufen müssen, 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 gesetzt wird.
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.