ISchedulerProxy-Struktur

Die Schnittstelle, über die Planer mit dem Ressourcen-Manager der Concurrency Runtime kommunizieren, um die Ressourcenzuordnung auszuhandeln.

Syntax

struct ISchedulerProxy;

Member

Öffentliche Methoden

Name Beschreibung
ISchedulerProxy::BindContext Ordnet einen Ausführungskontext einem Threadproxy zu, wenn er noch nicht einem zugeordnet ist.
ISchedulerProxy::CreateOversubscriber Erstellt einen neuen stamm des virtuellen Prozessors im Hardwarethread, der einer vorhandenen Ausführungsressource zugeordnet ist.
ISchedulerProxy::RequestInitialVirtualProcessors Fordert eine anfängliche Zuordnung virtueller Prozessorwurzeln an. Jeder Stamm des virtuellen Prozessors stellt die Möglichkeit dar, einen Thread auszuführen, der für den Zeitplaner Arbeit ausführen kann.
ISchedulerProxy::Shutdown Benachrichtigt den Ressourcen-Manager, dass der Planer heruntergefahren wird. Dies führt dazu, dass der Ressourcen-Manager sofort alle Ressourcen zurückgibt, die dem Planer gewährt wurden.
ISchedulerProxy::SubscribeCurrentThread Registriert den aktuellen Thread mit dem Ressourcen-Manager, der ihn diesem Zeitplan zugeordnet.
ISchedulerProxy::UnbindContext Disassociates a thread proxy from the execution context specified by the pContext parameter and returns it to the thread proxy factory's free pool. Diese Methode kann nur für einen Ausführungskontext aufgerufen werden, der über die ISchedulerProxy::BindContext-Methode gebunden wurde und noch nicht als pContext Parameter eines IThreadProxy::SwitchTo-Methodenaufrufs gestartet wurde.

Hinweise

Der Ressourcen-Manager übergibt eine ISchedulerProxy Schnittstelle zu jedem Planer, der mit der IResourceManager::RegisterScheduler-Methode registriert wird.

Vererbungshierarchie

ISchedulerProxy

Anforderungen

Kopfzeile: concrtrm.h

Namespace: Parallelität

ISchedulerProxy::BindContext-Methode

Ordnet einen Ausführungskontext einem Threadproxy zu, wenn er noch nicht einem zugeordnet ist.

virtual void BindContext(_Inout_ IExecutionContext* pContext) = 0;

Parameter

pContext
Eine Schnittstelle zum Ausführungskontext, die einem Threadproxy zugeordnet werden soll.

Hinweise

Normalerweise bindet die IThreadProxy::SwitchTo-Methode einen Threadproxy an einen Ausführungskontext bei Bedarf. Es gibt jedoch Situationen, in denen es erforderlich ist, einen Kontext im Voraus zu binden, um sicherzustellen, dass die SwitchTo Methode zu einem bereits gebundenen Kontext wechselt. Dies ist bei einem UMS-Planungskontext der Fall, da keine Methoden aufgerufen werden können, die Arbeitsspeicher zuweisen, und das Binden eines Threadproxys kann speicherzuordnungen umfassen, wenn ein Threadproxy nicht sofort im freien Pool der Threadproxyfactory verfügbar ist.

invalid_argument wird ausgelöst, wenn der Parameter pContext den Wert NULLaufweist.

ISchedulerProxy::CreateOversubscriber-Methode

Erstellt einen neuen stamm des virtuellen Prozessors im Hardwarethread, der einer vorhandenen Ausführungsressource zugeordnet ist.

virtual IVirtualProcessorRoot* CreateOversubscriber(_Inout_ IExecutionResource* pExecutionResource) = 0;

Parameter

pExecutionResource
Eine IExecutionResource Schnittstelle, die den Hardwarethread darstellt, den Sie überschreiben möchten.

Rückgabewert

Eine IVirtualProcessorRoot-Schnittstelle.

Hinweise

Verwenden Sie diese Methode, wenn der Planer einen bestimmten Hardwarethread für einen begrenzten Zeitraum überschreiben möchte. Nachdem Sie mit dem Stamm des virtuellen Prozessors fertig sind, sollten Sie sie an den Ressourcen-Manager zurückgeben, indem Sie die Remove-Methode auf der IVirtualProcessorRoot Schnittstelle aufrufen.

Sie können sogar einen vorhandenen virtuellen Prozessorstamm überschreiben, da die IVirtualProcessorRoot Schnittstelle von der IExecutionResource Schnittstelle erbt.

ISchedulerProxy::RequestInitialVirtualProcessors-Methode

Fordert eine anfängliche Zuordnung virtueller Prozessorwurzeln an. Jeder Stamm des virtuellen Prozessors stellt die Möglichkeit dar, einen Thread auszuführen, der für den Zeitplaner Arbeit ausführen kann.

virtual IExecutionResource* RequestInitialVirtualProcessors(bool doSubscribeCurrentThread) = 0;

Parameter

doSubscribeCurrentThread
Gibt an, ob der aktuelle Thread abonniert und während der Ressourcenzuordnung berücksichtigt werden soll.

Rückgabewert

Die IExecutionResource Schnittstelle für den aktuellen Thread, wenn der Parameter doSubscribeCurrentThread den Wert trueaufweist. Wenn der Wert lautet false, gibt die Methode NULL zurück.

Hinweise

Bevor ein Scheduler eine Arbeit ausführt, sollte diese Methode verwendet werden, um virtuelle Prozessorwurzeln aus dem Ressourcen-Manager anzufordern. Der Ressourcen-Manager greift mithilfe von "IScheduler::GetPolicy" auf die Richtlinie des Planers zu und verwendet die Werte für die Richtlinienschlüssel MinConcurrencyMaxConcurrency und TargetOversubscriptionFactor bestimmt, wie viele Hardwarethreads dem Scheduler anfangs zugewiesen werden sollen und wie viele virtuelle Prozessorwurzeln für jeden Hardwarethread erstellt werden sollen. Weitere Informationen dazu, wie Schedulerrichtlinien verwendet werden, um die anfängliche Zuweisung eines Planers zu bestimmen, finden Sie unter PolicyElementKey.

Der Ressourcen-Manager gewährt Ressourcen einem Planer durch Aufrufen der Methode "IScheduler::AddVirtualProcessors " mit einer Liste mit virtuellen Prozessorwurzeln. Die Methode wird als Rückruf in den Scheduler aufgerufen, bevor diese Methode zurückgegeben wird.

Wenn der Scheduler ein Abonnement für den aktuellen Thread angefordert hat, indem der Parameter doSubscribeCurrentThread auf truefestgelegt wird, gibt die Methode eine IExecutionResource Schnittstelle zurück. Das Abonnement muss zu einem späteren Zeitpunkt mithilfe der IExecutionResource::Remove-Methode beendet werden.

Bei der Ermittlung, welche Hardwarethreads ausgewählt sind, versucht der Ressourcen-Manager, die Prozessorknotenaffinität zu optimieren. Wenn ein Abonnement für den aktuellen Thread angefordert wird, ist es ein Hinweis darauf, dass der aktuelle Thread an der Arbeit teilnehmen möchte, die diesem Zeitplan zugewiesen ist. In einem solchen Fall befinden sich die zugeordneten virtuellen Prozessorenstamms auf dem Prozessorknoten, auf dem der aktuelle Thread ausgeführt wird, sofern möglich.

Durch das Abonnieren eines Threads wird die Abonnementebene des zugrunde liegenden Hardwarethreads um eins erhöht. Die Abonnementebene wird um eine reduziert, wenn das Abonnement beendet wird. Weitere Informationen zu Abonnementebenen finden Sie unter "IExecutionResource::CurrentSubscriptionLevel".

ISchedulerProxy::Shutdown-Methode

Benachrichtigt den Ressourcen-Manager, dass der Planer heruntergefahren wird. Dies führt dazu, dass der Ressourcen-Manager sofort alle Ressourcen zurückgibt, die dem Planer gewährt wurden.

virtual void Shutdown() = 0;

Hinweise

Alle IExecutionContext Schnittstellen, die der Scheduler als Ergebnis des Abonnierens eines externen Threads mit den Methoden ISchedulerProxy::RequestInitialVirtualProcessors erhalten hat oder ISchedulerProxy::SubscribeCurrentThread der Ressourcen-Manager verwendet IExecutionResource::Remove werden muss, bevor ein Scheduler sich selbst herunterschaltet.

Wenn ihr Scheduler über deaktivierte virtuelle Prozessorwurzeln verfügt, müssen Sie sie mithilfe von IVirtualProcessorRoot::Activate aktivieren und die Threadproxys ausführen lassen, die Dispatch die Methode der Ausführungskontexte verlassen, die sie verteilen, bevor Sie einen Planerproxy aufrufen Shutdown .

Es ist nicht erforderlich, dass der Zeitplaner alle virtuellen Prozessorwurzeln einzeln zurückgibt, die der Ressourcen-Manager ihm über Aufrufe der Remove Methode gewährt hat, da alle wurzeln der virtuellen Prozessoren beim Herunterfahren an den Ressourcen-Manager zurückgegeben werden.

ISchedulerProxy::SubscribeCurrentThread-Methode

Registriert den aktuellen Thread mit dem Ressourcen-Manager, der ihn diesem Zeitplan zugeordnet.

virtual IExecutionResource* SubscribeCurrentThread() = 0;

Rückgabewert

Die IExecutionResource Interfacing, die den aktuellen Thread in der Laufzeit darstellt.

Hinweise

Verwenden Sie diese Methode, wenn der Ressourcen-Manager den aktuellen Thread berücksichtigen soll, während Sie Ressourcen ihrem Planer und anderen Planern zuordnen. Es ist besonders nützlich, wenn der Thread plant, an der Arbeit teilzunehmen, die an Ihrem Planer in die Warteschlange gestellt wird, zusammen mit den virtuellen Prozessorwurzeln, die der Planer vom Ressourcen-Manager erhält. Der Ressourcen-Manager verwendet Informationen, um unnötige Überschreibung von Hardwarethreads auf dem System zu verhindern.

Die über diese Methode empfangene Ausführungsressource sollte mithilfe der IExecutionResource::Remove-Methode an den Ressourcen-Manager zurückgegeben werden. Der Thread, der die Remove Methode aufruft, muss derselbe Thread sein, der zuvor die SubscribeCurrentThread Methode aufgerufen hat.

Durch das Abonnieren eines Threads wird die Abonnementebene des zugrunde liegenden Hardwarethreads um eins erhöht. Die Abonnementebene wird um eine reduziert, wenn das Abonnement beendet wird. Weitere Informationen zu Abonnementebenen finden Sie unter "IExecutionResource::CurrentSubscriptionLevel".

ISchedulerProxy::UnbindContext-Methode

Disassociates a thread proxy from the execution context specified by the pContext parameter and returns it to the thread proxy factory's free pool. Diese Methode kann nur für einen Ausführungskontext aufgerufen werden, der über die ISchedulerProxy::BindContext-Methode gebunden wurde und noch nicht als pContext Parameter eines IThreadProxy::SwitchTo-Methodenaufrufs gestartet wurde.

virtual void UnbindContext(_Inout_ IExecutionContext* pContext) = 0;

Parameter

pContext
Der Ausführungskontext, der vom Threadproxy getrennt werden soll.

Siehe auch

Concurrency-Namespace
IScheduler-Struktur
IThreadProxy-Struktur
IVirtualProcessorRoot-Struktur
IResourceManager-Struktur