Planerinstanzen

Dieses Dokument beschreibt die Rolle von Schedulerinstanzen in der Concurrency Runtime und die Verwendung der Parallelitätsklassen::Scheduler und Parallelität::CurrentScheduler-Klassen zum Erstellen und Verwalten von Terminplanerinstanzen. Schedulerinstanzen sind nützlich, wenn Sie explizite Planungsrichtlinien bestimmten Arbeitsauslastungstypen 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.

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.

Abschnitte

Die Klassen "Scheduler" und "CurrentScheduler"

Der Taskplaner ermöglicht Anwendungen die Verwendung einer oder mehrerer Schedulerinstanzen zum Planen der Arbeit. Die Parallelität::Scheduler-Klasse stellt eine Schedulerinstanz dar und kapselt die Funktionalität, die sich auf Terminplanungsaufgaben bezieht.

Ein Thread, der an einen Scheduler angefügt ist, wird als Ausführungskontext oder einfach nur als Kontext bezeichnet. Ein Scheduler kann jederzeit im aktuellen Kontext aktiv sein. Der aktive Scheduler wird auch als aktueller Planer bezeichnet. Die Parallelitätslaufzeit verwendet die Parallelitätsklasse::CurrentScheduler, um Zugriff auf den aktuellen Planer zu ermöglichen. Der aktuelle Zeitplan für einen Kontext kann sich vom aktuellen Zeitplan für einen anderen Kontext unterscheiden. Die Laufzeit stellt keine Prozessebenendarstellung des aktuellen Zeitplans bereit.

In der Regel wird die CurrentScheduler Klasse für den Zugriff auf den aktuellen Zeitplan verwendet. Die Scheduler Klasse ist nützlich, wenn Sie einen Scheduler verwalten müssen, der nicht der aktuelle ist.

In den folgenden Abschnitten wird beschrieben, wie Sie eine Schedulerinstanz erstellen und verwalten. Ein vollständiges Beispiel, das diese Aufgaben veranschaulicht, finden Sie unter How to: Manage a Scheduler Instance.

[Nach oben]

Erstellen einer Scheduler-Instanz

Es gibt die folgenden drei Möglichkeiten zum Erstellen eines Scheduler Objekts:

  • Wenn kein Scheduler vorhanden ist, erstellt die Laufzeit einen Standardplaner für Sie, wenn Sie Laufzeitfunktionen verwenden, z. B. einen parallelen Algorithmus, um Arbeit auszuführen. Der Standardplaner wird zum aktuellen Planer für den Kontext, der die parallele Arbeit initiiert.

  • Die Parallelität::CurrentScheduler::Create-Methode erstellt ein Scheduler Objekt, das eine bestimmte Richtlinie verwendet und diesem Zeitplan den aktuellen Kontext zuordnet.

  • Die Parallelität::Scheduler::Create-Methode erstellt ein Scheduler Objekt, das eine bestimmte Richtlinie verwendet, sie aber nicht dem aktuellen Kontext zuordnet.

Wenn die Laufzeit einen Standardzeitplaner erstellen kann, können alle gleichzeitigen Vorgänge denselben Planer gemeinsam nutzen. In der Regel wird die Funktionalität, die von der Parallel Patterns Library (PPL) bereitgestellt wird, oder die asynchrone Agents-Bibliothek verwendet, um parallele Arbeiten auszuführen. Daher müssen Sie nicht direkt mit dem Planer arbeiten, um die Richtlinie oder Lebensdauer zu steuern. Wenn Sie die PPL oder die Agents-Bibliothek verwenden, erstellt die Laufzeit den Standardzeitplaner, wenn er nicht vorhanden ist, und macht ihn für jeden Kontext zum aktuellen Scheduler. Wenn Sie einen Planer erstellen und als aktueller Planer festlegen, verwendet die Laufzeit diesen Scheduler zum Planen von Vorgängen. Erstellen Sie zusätzliche Schedulerinstanzen nur, wenn Sie eine bestimmte Terminplanungsrichtlinie benötigen. Weitere Informationen zu den Richtlinien, die einem Scheduler zugeordnet sind, finden Sie unter "Scheduler Policies".

[Nach oben]

Verwalten der Lebensdauer einer Scheduler-Instanz

Die Laufzeit verwendet einen Verweiszählmechanismus, um die Lebensdauer von Scheduler Objekten zu steuern.

Wenn Sie die CurrentScheduler::Create Methode oder die Scheduler::Create Methode zum Erstellen eines Scheduler Objekts verwenden, legt die Laufzeit die anfängliche Referenzanzahl dieses Schedulers auf einen fest. Die Laufzeit erhöht die Referenzanzahl, wenn Sie die Parallelität::Scheduler::Attach-Methode aufrufen. Die Scheduler::Attach Methode ordnet das Scheduler Objekt dem aktuellen Kontext zu. Dadurch wird er zum aktuellen Zeitplan. Wenn Sie die CurrentScheduler::Create Methode aufrufen, erstellt Scheduler die Laufzeit ein Objekt und fügt es an den aktuellen Kontext an (und legt die Verweisanzahl auf eine fest). Sie können auch die Parallelität::Scheduler::Reference-Methode verwenden, um die Referenzanzahl eines Scheduler Objekts zu erhöhen.

Die Laufzeit erhöht die Referenzanzahl, wenn Sie die Parallelität::CurrentScheduler::D etach-Methode aufrufen, um den aktuellen Zeitplan zu trennen, oder rufen Sie die Parallelität::Scheduler::Release-Methode auf. Wenn die Referenzanzahl null erreicht, zerstört die Laufzeit das Scheduler Objekt, nachdem alle geplanten Vorgänge abgeschlossen wurden. Eine ausgeführte Aufgabe darf die Referenzanzahl des aktuellen Zeitplans erhöhen. Wenn die Referenzanzahl null erreicht und eine Aufgabe die Referenzanzahl erhöht, zerstört die Laufzeit das Scheduler Objekt erst, wenn die Referenzanzahl erneut null erreicht und alle Vorgänge abgeschlossen werden.

Die Laufzeit Standard enthält einen internen Stapel von Scheduler Objekten für jeden Kontext. Wenn Sie die Scheduler::Attach Methode aufrufen CurrentScheduler::Create , verschiebt die Laufzeit dieses Scheduler Objekt in den Stapel für den aktuellen Kontext. Dadurch wird er zum aktuellen Zeitplan. Wenn Sie aufrufen CurrentScheduler::Detach, füllt die Laufzeit den aktuellen Scheduler aus dem Stapel für den aktuellen Kontext und legt die vorherige als aktuellen Planer fest.

Die Laufzeit bietet mehrere Möglichkeiten zum Verwalten der Lebensdauer einer Schedulerinstanz. Die folgende Tabelle zeigt die entsprechende Methode, die den Scheduler aus dem aktuellen Kontext für jede Methode freigibt oder trennt, die einen Scheduler erstellt oder dem aktuellen Kontext hinzufügt.

Create or Attach-Methode Release- oder Trennmethode
CurrentScheduler::Create CurrentScheduler::Detach
Scheduler::Create Scheduler::Release
Scheduler::Attach CurrentScheduler::Detach
Scheduler::Reference Scheduler::Release

Das Aufrufen der unangemessenen Release- oder Trennmethode erzeugt in der Laufzeit nicht angegebenes Verhalten.

Wenn Sie z. B. funktionen verwenden, z. B. die PPL, die bewirkt, dass die Laufzeit den Standardplaner für Sie erstellt, lassen Sie diesen Planer nicht frei oder trennen Sie diesen Planer. Die Laufzeit verwaltet die Lebensdauer eines von ihm erstellten Zeitplans.

Da die Laufzeit ein Scheduler Objekt nicht zerstört, bevor alle Aufgaben abgeschlossen sind, können Sie die Parallelität::Scheduler::RegisterShutdownEvent-Methode oder die Parallelität::CurrentScheduler::RegisterShutdownEvent-Methode verwenden, um eine Benachrichtigung zu erhalten, wenn ein Scheduler Objekt zerstört wird. Dies ist nützlich, wenn Sie auf jeden Vorgang warten müssen, der von einem Scheduler Objekt geplant ist.

[Nach oben]

Methoden und Features

In diesem Abschnitt werden die wichtigen Methoden und CurrentSchedulerScheduler Klassen zusammengefasst.

Stellen Sie sich die CurrentScheduler Klasse als Hilfsprogramm zum Erstellen eines Zeitplans für die Verwendung im aktuellen Kontext vor. Mit der Scheduler Klasse können Sie einen Zeitplan steuern, der zu einem anderen Kontext gehört.

In der folgenden Tabelle sind die wichtigen Methoden aufgeführt, die von der CurrentScheduler Klasse definiert werden.

Methode Beschreibung
Erstellen Erstellt ein Scheduler Objekt, das die angegebene Richtlinie verwendet, und ordnet es dem aktuellen Kontext zu.
Get Ruft einen Zeiger auf das Scheduler Objekt ab, das dem aktuellen Kontext zugeordnet ist. Diese Methode erhöht nicht die Referenzanzahl des Scheduler Objekts.
Trennen Trennt den aktuellen Planer vom aktuellen Kontext und legt den vorherigen als aktuellen Planer fest.
RegisterShutdownEvent Registriert ein Ereignis, das von der Laufzeit festgelegt wird, wenn der aktuelle Scheduler zerstört wird.
CreateScheduleGroup Erstellt ein Parallelitätsobjekt::ScheduleGroup-Objekt im aktuellen Scheduler.
ScheduleTask Fügt der Planungswarteschlange des aktuellen Zeitplans einen einfachen Vorgang hinzu.
GetPolicy Ruft eine Kopie der Richtlinie ab, die dem aktuellen Zeitplan zugeordnet ist.

In der folgenden Tabelle sind die wichtigen Methoden aufgeführt, die von der Scheduler Klasse definiert werden.

Methode Beschreibung
Erstellen Erstellt ein Scheduler Objekt, das die angegebene Richtlinie verwendet.
Anfügen Ordnet das Scheduler Objekt dem aktuellen Kontext zu.
Referenz Erhöht den Verweiszähler des Scheduler Objekts.
Release Erhöht den Verweiszähler des Scheduler Objekts.
RegisterShutdownEvent Registriert ein Ereignis, das von der Laufzeit festgelegt wird, wenn das Scheduler Objekt zerstört wird.
CreateScheduleGroup Erstellt ein Parallelitätsobjekt::ScheduleGroup-Objekt im Scheduler Objekt.
ScheduleTask Plant einen einfachen Vorgang aus dem Scheduler Objekt.
GetPolicy Ruft eine Kopie der Richtlinie ab, die dem Scheduler Objekt zugeordnet ist.
SetDefaultSchedulerPolicy Legt die Richtlinie für die Laufzeit fest, die beim Erstellen des Standardzeitplanrs verwendet werden soll.
ResetDefaultSchedulerPolicy Stellt die Standardrichtlinie auf die Richtlinie wieder her, die vor dem Aufruf SetDefaultSchedulerPolicyaktiv war. Wenn der Standardplaner nach diesem Aufruf erstellt wird, verwendet die Laufzeit Standardrichtlinieneinstellungen zum Erstellen des Schedulers.

[Nach oben]

Beispiel

Grundlegende Beispiele zum Erstellen und Verwalten einer Schedulerinstanz finden Sie unter How to: Manage a Scheduler Instance.

Siehe auch

Aufgabenplanung
Vorgehensweise: Verwalten einer Planerinstanz
Planerrichtlinien
Planungsgruppen