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_HIGHEST
der 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_HIGHEST
soll.
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