Freigeben über


Planerinstanzen

Dieses Dokument beschreibt die Rolle der Planer Instanzen in der Runtime Parallelität und wie Sie die concurrency::Scheduler und concurrency::CurrentScheduler Klassen zum Erstellen und Verwalten der Planer Instanzen.Planerinstanzen sind nützlich, wenn Sie bestimmten Arten von Arbeitslasten explizite Planungsrichtlinien zuordnen möchten.Beispielsweise können Sie eine Planerinstanz erstellen, um einige Aufgaben mit höherer Threadpriorität auszuführen und andere Aufgaben mit dem Standardplaner mit normaler Threadpriorität auszuführen.

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.

Abschnitte

  • Die Scheduler-Klasse und die CurrentScheduler-Klasse

  • Erstellen einer Planerinstanz

  • Verwalten der Lebensdauer einer Planerinstanz

  • Methoden und Funktionen

  • Beispiel

Die Scheduler-Klasse und die CurrentScheduler-Klasse

Der Taskplaner ermöglicht Anwendungen die Arbeitsplanung mittels einer oder mehrerer Planerinstanzen.Die concurrency::Scheduler -Klasse stellt eine Instanz Planer dar und kapselt die Funktionen, die zum Planen von Tasks.

Der an einen Planer angefügte Thread wird als Ausführungskontext oder einfach als Kontext bezeichnet.Ein Planer kann zu jedem beliebigen Zeitpunkt im aktuellen Kontext aktiv sein.Der aktive Planer wird auch als aktueller Planer bezeichnet.Die Parallelität Runtime verwendet die concurrency::CurrentScheduler -Klasse, um Zugriff auf den aktuellen Planer.Der aktuelle Planer für einen Kontext kann sich vom aktuellen Planer für einen anderen Kontext unterscheiden.Von der Runtime wird keine Darstellung des aktuellen Planers auf Prozessebene bereitgestellt.

In der Regel wird die CurrentScheduler-Klasse für den Zugriff auf den aktuellen Planer verwendet.Die Scheduler-Klasse ist hilfreich, wenn Sie einen anderen Planer als den aktuellen verwalten müssen.

In den folgenden Abschnitten erfahren Sie, wie Sie eine Planerinstanz erstellen und verwalten.Ein vollständiges Beispiel zur Veranschaulichung dieser Aufgaben finden Sie unter Gewusst wie: Verwalten einer Planerinstanz.

Top

Erstellen einer Planerinstanz

Es gibt drei Möglichkeiten, ein Scheduler-Objekt zu erstellen:

  • Wenn kein Planer vorhanden ist, erstellt die Runtime automatisch einen Standardplaner, wenn Sie Laufzeitfunktionen, wie z. B. einen parallelen Algorithmus, zur Ausführung von Arbeiten verwenden.Der Standardplaner wird als aktueller Planer für den Kontext festgelegt, mit dem die parallele Verarbeitung initiiert wird.

  • Die Concurrency::CurrentScheduler::Create -Methode erstellt ein Scheduler -Objekt, das eine bestimmte Richtlinie verwendet und ordnet diese Planer mit dem aktuellen Kontext.

  • Die Concurrency::Scheduler::Create -Methode erstellt ein Scheduler -Objekt, das eine bestimmte Richtlinie verwendet, aber nicht mit dem aktuellen Kontext zuordnen.

Bei der Erstellung eines Standardplaners durch die Runtime können alle gleichzeitig ausgeführten Aufgaben denselben Planer nutzen.In der Regel wird die von der Parallel Patterns Library (PPL) oder von der Asynchronous Agents Library bereitgestellte Funktionalität zur Ausführung paralleler Arbeitsschritte verwendet.Somit müssen Sie die Richtlinie und die Lebensdauer des Planers nicht direkt steuern.Bei Nutzung der PPL oder der Agents Library erstellt die Runtime den Standardplaner, falls kein Planer vorhanden ist, und legt diesen als aktuellen Planer für jeden Kontext fest.Wenn Sie einen Planer erstellen und als aktuellen Planer festlegen, verwendet die Laufzeit diesen Planer, um Aufgaben zu planen.Erstellen Sie zusätzliche Planerinstanzen nur, wenn Sie eine bestimmte Planungsrichtlinie benötigen.Weitere Informationen zu Richtlinien, die einem Planer zugeordnet sind, finden Sie Planerrichtlinien.

Top

Verwalten der Lebensdauer einer Planerinstanz

Die Runtime steuert die Lebensdauer von Scheduler-Objekten mithilfe eines Mechanismus zum Zählen von Verweisen.

Wenn Sie die CurrentScheduler::Create-Methode oder die Scheduler::Create-Methode zur Erstellung eines Scheduler-Objekts verwenden, setzt die Runtime den Verweiszähler dieses Planers auf 1.Die Common Language Runtime inkrementiert den Verweiszähler beim Aufrufen der Concurrency::Scheduler::Attach Methode.Die Scheduler::Attach-Methode ordnet das Scheduler-Objekt dem aktuellen Kontext zu.Dadurch wird das Objekt als aktueller Planer festgelegt.Wenn Sie die CurrentScheduler::Create-Methode aufrufen, erstellt die Runtime ein Scheduler-Objekt und weist dieses dem aktuellen Kontext zu (und setzt den Verweiszähler auf 1).Können Sie auch die Concurrency::Scheduler::Reference -Methode, um den Verweiszähler erhöht ein Scheduler Objekt.

Die Common Language Runtime Dekrementiert den Verweiszähler beim Aufruf der Concurrency::CurrentScheduler::Detach Methode, um den aktuellen Planer trennen oder rufen Sie die Concurrency::Scheduler::Release Methode.Wenn der Verweiszähler 0 (null) erreicht, zerstört die Runtime das Scheduler-Objekt, nachdem alle geplanten Aufgaben beendet wurden.Eine ausgeführte Aufgabe kann den Verweiszählerwert des aktuellen Planers erhöhen.Wenn also der Verweiszähler 0 (null) erreicht und eine Aufgabe den Zählerwert erhöht, wird das Scheduler-Objekt nicht zerstört, bis der Verweiszähler erneut 0 (null) erreicht und alle Aufgaben beendet sind.

Die Runtime behält für jeden Kontext einen internen Stapel von Scheduler-Objekten bei.Wenn Sie die Scheduler::Attach-Methode oder die CurrentScheduler::Create-Methode aufrufen, wird das Scheduler-Objekt auf dem Stapel für den aktuellen Kontext abgelegt (Push-Verfahren).Dadurch wird das Objekt als aktueller Planer festgelegt.Wenn Sie CurrentScheduler::Detach aufrufen, wird der aktuelle Planer vom Stapel für den aktuellen Kontext aufgenommen (Pop-Verfahren) und das vorherige Objekt als aktueller Planer festgelegt.

Die Runtime bietet mehrere Möglichkeiten zur Verwaltung der Lebensdauer einer Planerinstanz.Die folgende Tabelle enthält die jeweils entsprechende Methode zum Freigeben bzw. Trennen des Planers vom aktuellen Kontext für die Methoden zum Erstellen bzw. Zuweisen eines Planers zum aktuellen Kontext.

Methode zum Erstellen bzw. Zuweisen

Methode zum Freigeben bzw. Trennen

CurrentScheduler::Create

CurrentScheduler::Detach

Scheduler::Create

Scheduler::Release

Scheduler::Attach

CurrentScheduler::Detach

Scheduler::Reference

Scheduler::Release

Das Aufrufen einer nicht geeigneten release- oder detach-Methode verursacht nicht definiertes Verhalten zur Laufzeit.

Wenn Sie Funktionen verwenden, die bewirken, dass zur Laufzeit automatisch ein Standardplaner erstellt wird, wie z. B. die PPL, müssen Sie diesen Planer nicht manuell freigeben/trennen.Die Lebensdauer automatisch erstellter Planer wird von der Runtime verwaltet.

Da die Common Language Runtime nicht zerstört ein Scheduler -Objekts, bevor alle Aufgaben fertig gestellt haben, können Sie die Concurrency::Scheduler::RegisterShutdownEvent Methode oder die Concurrency::CurrentScheduler::RegisterShutdownEvent Methode eine Benachrichtigung erhalten wenn ein Scheduler Objekt wird zerstört.Dies ist nützlich, wenn Sie auf das Beenden der einzelnen von einem Scheduler-Objekt geplanten Aufgaben warten müssen.

Top

Methoden und Funktionen

In diesem Abschnitt sind alle wichtigen Methoden der CurrentScheduler-Klasse und der Scheduler-Klasse zusammengefasst.

Betrachten Sie die CurrentScheduler-Klasse als Hilfsklasse zur Erstellung eines Planers für den aktuellen Kontext.Mit der Scheduler-Klasse können Sie einen Planer steuern, der einem anderen Kontext zugewiesen ist.

Die folgende Tabelle enthält alle wichtigen von der CurrentScheduler-Klasse definierten Methoden.

Methode

Beschreibung

Create

Erstellt ein Scheduler-Objekt, das die angegebene Richtlinie verwendet, und weist dieses dem aktuellen Kontext zu.

Get

Ruft einen Zeiger auf das Scheduler-Objekt ab, das dem aktuellen Kontext zugewiesen ist.Diese Methode erhöht den Verweiszählerwert des Scheduler-Objekts nicht.

Trennen

Trennt den aktuellen Planer vom aktuellen Kontext und legt den vorherigen Planer als aktuellen Planer fest.

RegisterShutdownEvent

Registriert ein Ereignis, das von der Runtime festgelegt wird, wenn der aktuelle Planer zerstört wird.

CreateScheduleGroup

Erstellt ein concurrency::ScheduleGroup -Objekt in der aktuellen Planer.

ScheduleTask

Fügt der Warteschlange des aktuellen Planers eine einfache Aufgabe hinzu.

GetPolicy

Ruft eine Kopie der Richtlinie ab, die dem aktuellen Planer zugeordnet ist.

Die folgende Tabelle enthält alle wichtigen von der Scheduler-Klasse definierten Methoden.

Methode

Beschreibung

Create

Erstellt ein Scheduler-Objekt, das die angegebene Richtlinie verwendet.

Anfügen

Ordnet das Scheduler-Objekt dem aktuellen Kontext zu.

Verweis

Erhöht den Verweiszählerwert des Scheduler-Objekts.

Release

Verringert den Verweiszählerwert des Scheduler-Objekts.

RegisterShutdownEvent

Registriert ein Ereignis, das von der Runtime festgelegt wird, wenn das Scheduler-Objekt zerstört wird.

CreateScheduleGroup

Erstellt ein concurrency::ScheduleGroup -Objekt in der Scheduler Objekt.

ScheduleTask

Plant eine einfache Aufgabe im Scheduler-Objekt.

GetPolicy

Ruft eine Kopie der Richtlinie ab, die dem Scheduler-Objekt zugeordnet ist.

SetDefaultSchedulerPolicy

Legt die Richtlinie fest, die beim Erstellen des Standardplaners von der Runtime verwendet wird.

ResetDefaultSchedulerPolicy

Stellt die Richtlinie, die vor dem Aufruf von SetDefaultSchedulerPolicy aktiviert war, als Standardrichtlinie wieder her.Wenn der Standardplaner nach diesem Aufruf erstellt wird, verwendet die Runtime die Standardrichtlinieneinstellungen beim Erstellen des Planers.

Top

Beispiel

Zwei grundlegende Beispiele zum Erstellen und Verwalten einer Planerinstanz finden Sie unter Gewusst wie: Verwalten einer Planerinstanz.

Siehe auch

Aufgaben

Gewusst wie: Verwalten einer Planerinstanz

Konzepte

Taskplaner (Concurrency Runtime)

Planerrichtlinien

Planungsgruppen