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 NULL
aufweist.
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 true
aufweist. 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
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 true
festgelegt 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