Planerrichtlinien

In diesem Dokument wird die Rolle von Schedulerrichtlinien in der Parallelitätslaufzeit beschrieben. Eine Planerrichtlinie steuert die Strategie, die der Planer beim Verwalten von Vorgängen verwendet. Betrachten Sie z. B. eine Anwendung, für die einige Aufgaben ausgeführt THREAD_PRIORITY_NORMAL werden müssen, und andere Aufgaben, die bei THREAD_PRIORITY_HIGHESTder Ausführung ausgeführt werden müssen. Sie können zwei Schedulerinstanzen erstellen: eine, die die ContextPriority richtlinie THREAD_PRIORITY_NORMAL angibt und eine andere, die die gleiche Richtlinie angibt, die sein THREAD_PRIORITY_HIGHESTsoll.

Mithilfe von Zeitplanrichtlinien können Sie die verfügbaren Verarbeitungsressourcen aufteilen und jedem Planer einen festen Satz von Ressourcen zuweisen. Betrachten Sie beispielsweise einen parallelen Algorithmus, der nicht über vier Prozessoren hinaus skaliert wird. Sie können eine Zeitplanrichtlinie erstellen, die ihre Aufgaben auf die gleichzeitige Verwendung von maximal vier Prozessoren beschränkt.

Tipp

Die Parallelitätslaufzeit stellt einen Standardplaner bereit. Daher müssen Sie keins in Ihrer Anwendung erstellen. Da der Aufgabenplaner Ihnen dabei hilft, die Leistung Ihrer Anwendungen zu optimieren, empfehlen wir, mit der Parallel Patterns Library (PPL) oder der asynchronen Agents-Bibliothek zu beginnen, wenn Sie mit der Parallelitätslaufzeit noch nicht vertraut sind.

Wenn Sie die Parallelität::CurrentScheduler::Create, concurrency::Scheduler::Create oder concurrency::Scheduler::SetDefaultSchedulerPolicy-Methode zum Erstellen einer Schedulerinstanz verwenden, stellen Sie ein Parallelitätsobjekt bereit, das eine Sammlung von Schlüsselwertpaaren 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 möchten. Die Erneut Standard argumente sind Schlüsselwertpaare für jedes Richtlinienelement. Im folgenden Beispiel wird ein SchedulerPolicy Objekt erstellt, das drei Richtlinienelemente angibt. Die Laufzeit verwendet Standardwerte für die nicht angegebenen Richtlinienschlüssel.

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

Die Concurrency::P olicyElementKey-Aufzählung definiert die Richtlinienschlüssel, die dem Task scheduler zugeordnet sind. In der folgenden Tabelle werden die Richtlinienschlüssel und der Standardwert beschrieben, den die Laufzeit für jeden von ihnen verwendet.

Richtlinienschlüssel Beschreibung Standardwert
SchedulerKind Ein Parallelitätswert::SchedulerType , der den Typ von Threads angibt, die zum Planen von Vorgängen verwendet werden sollen. ThreadScheduler (normale Threads verwenden). Dies ist der einzige gültige Wert für diesen Schlüssel.
MaxConcurrency Ein unsigned int Wert, der die maximale Anzahl von Parallelitätsressourcen angibt, die der Zeitplan verwendet. concurrency::MaxExecutionResources
MinConcurrency Ein unsigned int Wert, der die minimale Anzahl von Parallelitätsressourcen angibt, die der Zeitplan verwendet. 1
TargetOversubscriptionFactor Ein unsigned int Wert, der angibt, wie viele Threads jeder Verarbeitungsressource zugeordnet werden sollen. 1
LocalContextCacheSize Ein unsigned int Wert, der die maximale Anzahl von 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 Stapels in Kilobyte angibt, die für jeden Kontext reserviert werden soll. 0 (Standardstapelgröße verwenden)
ContextPriority Ein int Wert, der die Threadpriorität jedes Kontexts angibt. Dies kann ein beliebiger Wert sein, den Sie an SetThreadPriority oder INHERIT_THREAD_PRIORITY. THREAD_PRIORITY_NORMAL
SchedulingProtocol Ein Parallelitätswert::SchedulingProtocolType , der den zu verwendenden Terminplanungsalgorithmus angibt. EnhanceScheduleGroupLocality
DynamicProgressFeedback Ein Concurrency::D ynamicProgressFeedbackType-Wert , der angibt, ob Ressourcen entsprechend statistikenbasierten Statusinformationen neu ausgeglichen werden sollen.

Hinweis: Legen Sie diese Richtlinie nicht fest, ProgressFeedbackDisabled da sie für die Verwendung durch die Laufzeit reserviert ist.
ProgressFeedbackEnabled

Jeder Planer verwendet beim Planen von Vorgängen eine eigene Richtlinie. Die Richtlinien, die einem Planer zugeordnet sind, wirken sich nicht auf das Verhalten eines anderen Zeitplans aus. Darüber hinaus können Sie die Schedulerrichtlinie nicht ändern, nachdem Sie das Scheduler Objekt erstellt haben.

Wichtig

Verwenden Sie nur Schedulerrichtlinien, um die Attribute für Threads zu steuern, die von der Laufzeit erstellt werden. Ändern Sie nicht die Threadaffinität oder Priorität von Threads, die von der Laufzeit erstellt werden, da dies zu einem nicht definierten Verhalten führen kann.

Die Laufzeit erstellt einen Standardzeitplaner für Sie, wenn Sie einen nicht explizit erstellen. Wenn Sie den Standardzeitplaner in Ihrer Anwendung verwenden möchten, aber eine Richtlinie für diesen zu verwendenden Zeitplan angeben möchten, rufen Sie die Parallelität::Scheduler::SetDefaultSchedulerPolicy-Methode auf, bevor Sie parallele Arbeit planen. Wenn Sie die Scheduler::SetDefaultSchedulerPolicy Methode nicht aufrufen, verwendet die Laufzeit die Standardrichtlinienwerte aus der Tabelle.

Verwenden Sie die Parallelität::CurrentScheduler::GetPolicy und die Parallelität::Scheduler::GetPolicy-Methoden , um eine Kopie der Schedulerrichtlinie abzurufen. Die von diesen Methoden empfangenen Richtlinienwerte können sich von den Richtlinienwerten unterscheiden, die Sie beim Erstellen des Schedulers angeben.

Beispiel

Informationen zum Untersuchen von Beispielen, die bestimmte Zeitplanrichtlinien verwenden, um das Verhalten des Zeitplans zu steuern, finden Sie unter How to: Specify Specific Scheduler Policies and How to: Create Agents that Use Specific Scheduler Policies.

Siehe auch

Aufgabenplanung
Vorgehensweise: Angeben von bestimmten Planerrichtlinien
Vorgehensweise: Erstellen von Agents, die bestimmte Planerrichtlinien verwenden