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.

TippTipp

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 Common Language Runtime verwendet die concurrency::ScheduleGroup Klasse zum Darstellen von geplanten Gruppen.Erstellen einer ScheduleGroup -Objekt, rufen Sie die Concurrency::CurrentScheduler::CreateScheduleGroup oder Concurrency::Scheduler::CreateScheduleGroup Methode.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 inkrementiert den Verweiszähler um eins.Die Concurrency::ScheduleGroup::Release -Methode Dekrementiert den Verweiszähler um eins.

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

Sie können auch die Concurrency::ScheduleGroup::ScheduleTask -Methode, um eine einfache Aufgabe zu 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