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.
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".
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.
Methoden und Features
In diesem Abschnitt werden die wichtigen Methoden und CurrentScheduler
Scheduler
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 SetDefaultSchedulerPolicy aktiv war. Wenn der Standardplaner nach diesem Aufruf erstellt wird, verwendet die Laufzeit Standardrichtlinieneinstellungen zum Erstellen des Schedulers. |
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