Freigeben über


Planerrichtlinien

In diesem Dokument wird die Rolle von Planerrichtlinien in der Concurrency Runtime beschrieben.Mithilfe einer Planerrichtlinie können Sie die Strategie festlegen, die der Planer zum Verwalten von Aufgaben verwendet.Betrachten Sie beispielsweise eine Anwendung, die erfordert einige Aufgaben führen Sie auf THREAD_PRIORITY_NORMAL und andere Aufgaben an THREAD_PRIORITY_HIGHEST.Können Sie zwei Instanzen der Scheduler: einen, der angibt, die ContextPriority Richtlinie, um THREAD_PRIORITY_NORMAL und einen weiteren, der angibt, den gleichen Richtlinien eine THREAD_PRIORITY_HIGHEST.

Scheduler-Richtlinien verwenden, können Sie die verfügbaren Prozessorressourcen unterteilen und jedem Planer eine feste Gruppe von Ressourcen zuweisen.Nehmen Sie als Beispiel einen parallelen Algorithmus mit einer Skalierung von bis zu vier Prozessoren.In diesem Fall können Sie eine Planerrichtlinie erstellen, die festlegt, dass zu keinem Zeitpunkt mehr als vier Prozessoren gleichzeitig für die Aufgaben verwendet werden.

TippTipp

Die Parallelität Runtime stellt einen Standard-Planer.Daher müssen Sie in Ihrer Anwendung erstellen.Der Taskplaner ermöglicht eine genauere Steuerung der Leistung von Anwendungen. Aus diesem Grund wird empfohlen, mit der Parallel Patterns Library (PPL) oder der Asynchronous Agents Library zu beginnen, wenn Sie noch nicht mit der Concurrency Runtime vertraut sind.

Bei Verwendung der Concurrency::CurrentScheduler::Create, Concurrency::Scheduler::Create, oder Concurrency::Scheduler::SetDefaultSchedulerPolicy -Methode, um eine Instanz Scheduler zu erstellen, geben Sie einen concurrency::SchedulerPolicy -Objekt, das eine Auflistung von Schlüssel-Wert-Paare enthält, die das Verhalten des Schedulers angeben.Der SchedulerPolicy-Konstruktor akzeptiert eine variable Anzahl von Argumenten.Das erste Argument ist die Anzahl der Richtlinienelemente, die Sie angeben.Die weiteren Argumente sind Schlüssel-Wert-Paare für jedes Richtlinienelement.Im folgenden Beispiel wird ein SchedulerPolicy-Objekt erstellt, das drei Richtlinienelemente angibt.Die Common Language Runtime verwendet die Standardwerte für die Policy-Schlüssel, die nicht angegeben sind.

SchedulerPolicy policy(3,       
   MinConcurrency, 2,
   MaxConcurrency, 4,
   ContextPriority, THREAD_PRIORITY_HIGHEST
);

Die concurrency::PolicyElementKey -Enumeration definiert, die mit dem Taskplaner Richtlinienschlüssel.Die folgende Tabelle enthält eine Beschreibung der einzelnen Richtlinienschlüssel sowie die zugehörigen Standardwerte.

Richtlinienschlüssel

Beschreibung

Standardwert

SchedulerKind

A concurrency::SchedulerType -Wert, der den Typ des Threads verwenden zum Planen von Tasks angibt.

ThreadScheduler(verwenden Sie normale Themen).Dies ist der einzige gültige Wert für diesen Schlüssel.

MaxConcurrency

Ein unsigned int-Wert, der die maximale Anzahl an Parallelitätsressourcen angibt, die der Planer verwendet.

Concurrency::MaxExecutionResources

MinConcurrency

Ein unsigned int-Wert, der die Mindestanzahl an Parallelitätsressourcen angibt, die der Planer verwendet.

1

TargetOversubscriptionFactor

Ein unsigned int-Wert, der angibt, wie viele Threads jeder Verarbeitungsressource zuzuordnen sind.

1

LocalContextCacheSize

Ein unsigned int-Wert, der die maximale Anzahl an Kontexten angibt, die in der lokalen Warteschlange jedes virtuellen Prozessors zwischengespeichert werden können.

8

ContextStackSize

Ein unsigned int-Wert, der die Größe des für jeden Kontext zu reservierenden Stapels in KB angibt.

0 = Standardstapelgröße verwenden

ContextPriority

Ein int-Wert, der die Threadpriorität der einzelnen Kontexte angibt.Dies kann jeder Wert sein, der sich an SetThreadPriority oder INHERIT_THREAD_PRIORITY übergeben lässt.

THREAD_PRIORITY_NORMAL

SchedulingProtocol

A concurrency::SchedulingProtocolType Wert, der angibt, den scheduling-Algorithmus zu verwenden.

EnhanceScheduleGroupLocality

DynamicProgressFeedback

A concurrency::DynamicProgressFeedbackType -Wert, der angibt, ob Ressourcen gemäß Statistiken basierende Fortschrittsinformationen auszugleichen.

Hinweis legen Sie diese Richtlinie nicht auf ProgressFeedbackDisabled weil es für die Common Language Runtime reserviert ist.

ProgressFeedbackEnabled

Jeder Planer verwendet eine eigene Richtlinie beim Planen von Aufgaben.Die Richtlinien, die einen Planer zugeordnet sind wirken sich nicht auf das Verhalten von jeder anderen Planer aus.Nach dem Erstellen des Scheduler-Objekts können Sie die Planerrichtlinie außerdem nicht mehr ändern.

Wichtiger HinweisWichtig

Steuern Sie die Attribute für Threads, die von der Laufzeit erstellt werden, nur mit Planerrichtlinien.Ändern Sie nicht die Threadaffinität oder die Priorität des Threads, die von der Laufzeit erstellt werden, da, die nicht definiertem Verhalten führen könnte.

Wenn Sie nicht explizit einen Standardplaner erstellen, wird dieser von der Laufzeit für Sie erstellt.Wenn Sie den Standard-Planer in Ihrer Anwendung verwenden möchten, jedoch eine Richtlinie für diese Planer verwenden sollen, rufen Sie die Concurrency::Scheduler::SetDefaultSchedulerPolicy Methode, bevor Sie planen, dass parallel zu arbeiten.Wenn Sie die Scheduler::SetDefaultSchedulerPolicy-Methode nicht aufrufen, verwendet die Runtime die in der Tabelle aufgeführten Standardrichtlinienwerte.

Verwendung der Concurrency::CurrentScheduler::GetPolicy und die Concurrency::Scheduler::GetPolicy Methoden zum Abrufen einer Kopie der Scheduler-Richtlinie.Die von diesen Methoden zurückgegebenen Richtlinienwerte können von den Richtlinienwerten abweichen, die Sie beim Erstellen des Planers angeben.

Beispiel

Um Beispiele zu untersuchen, die bestimmte Scheduler-Richtlinien verwenden, um das Verhalten des Schedulers steuern, finden Sie unter Gewusst wie: Angeben von bestimmten Planerrichtlinien und Gewusst wie: Erstellen von Agents, die bestimmte Planerrichtlinien verwenden.

Siehe auch

Aufgaben

Gewusst wie: Angeben von bestimmten Planerrichtlinien

Gewusst wie: Erstellen von Agents, die bestimmte Planerrichtlinien verwenden

Konzepte

Taskplaner (Concurrency Runtime)