Freigeben über


Planungsgruppen

In diesem Dokument wird die Rolle von Planergruppen in der Concurrency Runtime beschrieben. Eine Planungsgruppe dient zur Gruppierung oder Zuordnung zusammenhängender Aufgaben. Jeder Planer weist mindestens eine Planungsgruppe auf. Mithilfe von Planungsgruppen können Sie die Fragmentierung von Aufgaben verhindern, beispielsweise damit eine Gruppe verwandter Aufgaben von der Ausführung auf dem gleichen Prozessorknoten profitiert. Wenn Ihre Anwendung dagegen spezifische Anforderungen an die Qualität aufweist, beispielsweise wenn Sie die Anzahl der Verarbeitungsressourcen für eine Reihe von Aufgaben begrenzen möchten, wird die Verwendung von Planerinstanzen empfohlen. Weitere Informationen zu Planerinstanzen finden Sie unter Planerinstanzen.

Tipp

Die Concurrency Runtime stellt einen Standardplaner bereit. Es ist daher nicht erforderlich, einen Planer in der Anwendung zu 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.

Jedes Scheduler-Objekt weist eine Standardplanungsgruppe für jeden Planungsknoten auf. Ein Planungsknoten dient der Zuordnung zur zugrunde liegenden Systemtopologie. Die Runtime erstellt einen Planungsknoten für jedes Prozessorpaket bzw. jeden NUMA-Knoten (Non-Uniform Memory Architecture), je nachdem, welche Anzahl größer ist. Wenn Sie eine Aufgabe nicht explizit einer Planungsgruppe zuordnen, wird vom Planer eine Gruppe ausgewählt und die Aufgabe hinzugefügt.

Mit der SchedulingProtocol-Planerrichtlinie wird die Reihenfolge festgelegt, in der der Planer die Aufgaben in den einzelnen Planungsgruppen ausführt. Wenn SchedulingProtocol auf EnhanceScheduleGroupLocality (Standardeinstellung) festgelegt ist, wählt der Taskplaner die nächste Aufgabe aus der Planungsgruppe, in der die Verarbeitung erfolgt, wenn die aktuelle Aufgabe beendet oder kooperativ zurückgehalten wird. Der Taskplaner sucht zunächst in der aktuellen Planungsgruppe nach Arbeit und setzt die Suche dann in der nächsten verfügbaren Gruppe fort. Wenn SchedulingProtocol aber auf EnhanceForwardProgress festgelegt wird, wechselt der Planer zur nächsten Planungsgruppe, wenn eine Aufgabe beendet oder zurückgehalten wird. Ein Beispiel, in dem diese Richtlinien verglichen werden, finden Sie unter Gewusst wie: Beeinflussen der Ausführungsreihenfolge mithilfe von Zeitplangruppen.

Die Laufzeit concurrency::ScheduleGroup verwendet die Klasse, um zu Planungsgruppen darstellen. Um ein ScheduleGroup-Objekt zu erstellen, rufen Sie die concurrency::CurrentScheduler::CreateScheduleGroup oder concurrency::Scheduler::CreateScheduleGroup-Methode auf. Zur Steuerung der Lebensdauer von ScheduleGroup-Objekten wird in der Runtime wie auch bei Scheduler-Objekten ein Verweiszählmechanismus verwendet. Wenn Sie ein ScheduleGroup-Objekt erstellen, wird der Verweiszähler auf 1 gesetzt. Die concurrency::ScheduleGroup::Reference-Methode erhöht den Verweis, der durch einen Objekts. Die concurrency::ScheduleGroup::Release-Methode dekrementiert den Verweis, der durch einen Objekts.

Viele Typen in der Concurrency Runtime ermöglichen die Zuordnung eines Objekts zu einer Planungsgruppe. Beispielsweise stellen die concurrency::agent-Klasse und Nachrichtenblockklassen wie concurrency::unbounded_buffer, concurrency::join und concurrency::timer, überladene Versionen des Konstruktors bereit, der ein ScheduleGroup-Objekt nehmen. Die Runtime verwendet das Scheduler-Objekt, das diesem ScheduleGroup-Objekt zugeordnet ist, zur Aufgabenplanung.

Sie können die Methode auch concurrency::ScheduleGroup::ScheduleTask verwenden, um eine einfache Aufgabe planen. Weitere Informationen zu einfachen Aufgaben finden Sie unter Einfache Aufgaben.

Beispiel

Ein Beispiel, in dem die Reihenfolge der Aufgabenausführung mit Planungsgruppen gesteuert wird, finden Sie unter Gewusst wie: Beeinflussen der Ausführungsreihenfolge mithilfe von Zeitplangruppen.

Siehe auch

Aufgaben

Gewusst wie: Beeinflussen der Ausführungsreihenfolge mithilfe von Zeitplangruppen

Konzepte

Taskplaner (Concurrency Runtime)

Planerinstanzen