Freigeben über


ISchedulerProxy-Struktur

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

Syntax

struct ISchedulerProxy;

Mitglieder

Ö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 Scheduler 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 Entfernt einen Thread-Proxy aus dem durch den pContext-Parameter angegebenen Ausführungskontext und gibt ihn in den freien Pool der Thread-Proxy-Fabrik zurück. 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 an jeden Planer, der sich mit der Methode IResourceManager::RegisterScheduler registriert.

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 Thread-Proxys kann Speicherzuweisungen umfassen, wenn ein Thread-Proxy nicht sofort im freien Pool der Thread-Proxy-Fabrik 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 übersubscribieren möchten.

Rückgabewert

Eine IVirtualProcessorRoot-Schnittstelle.

Hinweise

Verwenden Sie diese Methode, wenn der Scheduler einen bestimmten Hardware-Thread für eine begrenzte Zeit überbelegen 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 - die 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 MinConcurrency, MaxConcurrency und TargetOversubscriptionFactor, um zu bestimmen, wie viele Hardware-Threads dem Scheduler anfangs zugewiesen werden sollen und wie viele virtuelle Prozessoren pro Hardware-Thread erstellt werden sollen. Weitere Informationen darüber, wie Schedulerrichtlinien verwendet werden, um die anfängliche Zuweisung eines Schedulers 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-Funktion in den Scheduler aufgerufen, bevor diese Methode zurückkehrt.

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 Scheduler 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 oder ISchedulerProxy::SubscribeCurrentThread erhalten hat, müssen dem Ressourcen-Manager mit IExecutionResource::Remove zurückgegeben werden, bevor der Scheduler sich selbst herunterfährt.

Wenn Ihr Scheduler deaktivierte virtuelle Prozessor-Roots hatte, müssen Sie diese mit IVirtualProcessorRoot::Activate aktivieren. Lassen Sie die Thread-Proxys, die auf ihnen ausgeführt werden, die Methode der Ausführungskontexte, die sie verteilen, verlassen, bevor Sie Shutdown auf einem Scheduler-Proxy aufrufen.

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 Schnittstelle, die den aktuellen Thread zur 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 eine unnötige Überbeanspruchung von Hardware-Threads im 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

Entfernt einen Thread-Proxy aus dem durch den pContext-Parameter angegebenen Ausführungskontext und gibt ihn in den freien Pool der Thread-Proxy-Fabrik zurück. 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 Thread-Proxy getrennt werden soll.

Siehe auch

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