Freigeben über


Planungsgruppen

In diesem Dokument wird die Rolle von Zeitplangruppen in der Parallelitätslaufzeit beschrieben. Eine Zeitplangruppe affinitisiert oder Gruppen verwandte Aufgaben zusammen. Jeder Planer verfügt über eine oder mehrere Zeitplangruppen. Verwenden Sie Planungsgruppen, wenn Sie ein hohes Maß an Lokalität zwischen den Aufgaben benötigen. Dies ist zum Beispiel dann der Fall, wenn es für eine Gruppe verwandter Aufgaben vorteilhaft ist, auf dem gleichen Prozessorknoten ausgeführt zu werden. Verwenden Sie dagegen Schedulerinstanzen, wenn Ihre Anwendung bestimmte Qualitätsanforderungen hat, z. B. wenn Sie die Menge der Verarbeitungsressourcen einschränken möchten, die einer Reihe von Vorgängen zugeordnet sind. Weitere Informationen zu Schedulerinstanzen finden Sie unter Scheduler Instances.

Tipp

Die Concurrency Runtime stellt einen Standardplaner bereit. Sie müssen daher keinen 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.

Jedes Scheduler Objekt verfügt über eine Standardzeitplangruppe für jeden Planungsknoten. Ein Planungsknoten ist der zugrunde liegenden Systemtopologie zugeordnet. Die Laufzeit erstellt einen Planungsknoten für jeden Prozessorpaket- oder Nicht-Uniform Memory Architecture (NUMA)-Knoten, je nachdem, welcher Wert größer ist. Wenn Sie einen Vorgang nicht explizit einer Terminplangruppe zuordnen, wählt der Planer aus, zu welcher Gruppe der Vorgang hinzugefügt werden soll.

Die SchedulingProtocol Planerrichtlinie beeinflusst die Reihenfolge, in der der Planer die Vorgänge in jeder Terminplangruppe ausführt. Wenn SchedulingProtocol sie auf EnhanceScheduleGroupLocality (standard) festgelegt ist, wählt der Vorgangsplaner den nächsten Vorgang aus der Terminplangruppe aus, an der er arbeitet, wenn der aktuelle Vorgang abgeschlossen ist oder kooperativ ergibt. Der Vorgangsplaner durchsucht die aktuelle Zeitplangruppe nach Arbeit, bevor sie zur nächsten verfügbaren Gruppe wechselt. Umgekehrt wechselt der Planer nach Abschluss oder Ertrag jedes Vorgangs zur nächsten Terminplangruppe, wenn SchedulingProtocol er auf EnhanceForwardProgress"Festgelegt" festgelegt ist. Ein Beispiel, das diese Richtlinien vergleicht, finden Sie unter How to: Use Schedule Groups to Influence Order of Execution.

Die Laufzeit verwendet die Parallelität::ScheduleGroup-Klasse , um Zeitplangruppen darzustellen. Rufen Sie zum Erstellen eines ScheduleGroup Objekts die Parallelität::CurrentScheduler::CreateScheduleGroup oder concurrency::Scheduler::CreateScheduleGroup-Methode auf. Die Laufzeit verwendet einen Verweiszählungsmechanismus, um die Lebensdauer von ScheduleGroup Objekten genau wie bei Scheduler Objekten zu steuern. Wenn Sie ein ScheduleGroup Objekt erstellen, legt die Laufzeit den Verweiszähler auf einen fest. Die Parallelität::ScheduleGroup::Reference-Methode erhöht den Verweiszähler um einen. Die Parallelität::ScheduleGroup::Release-Methode erhöht den Verweiszähler um einen.

Mit vielen Typen in der Parallelitätslaufzeit können Sie ein Objekt einer Zeitplangruppe zuordnen. Beispielsweise stellen die Klassen "concurrency::agent" und "message block" wie "concurrency::unbounded_buffer", "concurrency::join" und "concurrency::timer" überladene Versionen des Konstruktors bereit, der ein ScheduleGroup Objekt verwendet. Die Laufzeit verwendet das Scheduler Objekt, das diesem ScheduleGroup Objekt zugeordnet ist, um den Vorgang zu planen.

Sie können auch die Parallelität::ScheduleGroup::ScheduleTask-Methode verwenden, um einen einfachen Vorgang zu planen. Weitere Informationen zu einfachen Aufgaben finden Sie unter "Einfache Aufgaben".

Beispiel

Ein Beispiel, das Zeitplangruppen verwendet, um die Reihenfolge der Aufgabenausführung zu steuern, finden Sie unter How to: Use Schedule Groups to Influence Order of Execution.

Siehe auch

Aufgabenplanung
Planerinstanzen
Vorgehensweise: Beeinflussen der Ausführungsreihenfolge mithilfe von Zeitplangruppen