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.
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