Freigeben über


Planerrichtlinien

In diesem Dokument wird die Rolle von Planerrichtlinien in der Concurrency Runtime beschrieben. Mithilfe einer Planerrichtlinie können Sie die Strategie festlegen, die der Planer zum Verwalten von Aufgaben verwendet. Eine Anwendung kann z. B. bei einigen Aufgaben die Verwendung von UMS-Threads und bei anderen Aufgaben die Verwendung des normalen Threadingmechanismus erfordern. Sie können zwei Planerinstanzen erstellen: eine zur Erstellung von UMS-Threads im Rahmen der Planerrichtlinie und eine andere zur Angabe normaler Threads im Rahmen der Planerrichtlinie. Weitere Informationen zu UMS finden Sie unter Benutzermodusplanung.

Planerrichtlinien ermöglichen Ihnen außerdem, die verfügbaren Verarbeitungsressourcen zu teilen und jedem Planer einen festen Ressourcensatz zuzuweisen. Nehmen Sie als Beispiel einen parallelen Algorithmus mit einer Skalierung von bis zu vier Prozessoren. In diesem Fall können Sie eine Planerrichtlinie erstellen, die festlegt, dass zu keinem Zeitpunkt mehr als vier Prozessoren gleichzeitig für die Aufgaben verwendet werden.

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.

Beim Erstellen einer Planerinstanz mit der Methode Concurrency::CurrentScheduler::Create, Concurrency::Scheduler::Create oder Concurrency::Scheduler::SetDefaultSchedulerPolicy stellen Sie ein Concurrency::SchedulerPolicy-Objekt mit einer Auflistung von Schlüssel-/Wertpaaren bereit, die das Verhalten des Planers bestimmen. Der SchedulerPolicy-Konstruktor akzeptiert eine variable Anzahl von Argumenten. Das erste Argument ist die Anzahl der Richtlinienelemente, die Sie angeben. Die weiteren Argumente sind Schlüssel-Wert-Paare für jedes Richtlinienelement. Im folgenden Beispiel wird ein SchedulerPolicy-Objekt erstellt, das drei Richtlinienelemente angibt. Für Richtlinienschlüssel ohne Wertangabe verwendet die Runtime die Standardwerte.

SchedulerPolicy policy(3,       
   MinConcurrency, 2,
   MaxConcurrency, 4,
   ContextPriority, THREAD_PRIORITY_HIGHEST
);

Mit der Concurrency::PolicyElementKey-Enumeration werden die Richtlinienschlüssel definiert, die dem Taskplaner zugeordnet sind. Die folgende Tabelle enthält eine Beschreibung der einzelnen Richtlinienschlüssel sowie die zugehörigen Standardwerte.

Richtlinienschlüssel

Beschreibung

Standardwert

SchedulerKind

Ein Concurrency::SchedulerType-Wert, der angibt, ob normale Threads oder UMS-Threads zur Aufgabenplanung verwendet werden.

ThreadScheduler (Verwenden von normalen Threads)

MaxConcurrency

Ein unsigned int-Wert, der die maximale Anzahl an Parallelitätsressourcen angibt, die der Planer verwendet.

Concurrency::MaxExecutionResources

MinConcurrency

Ein unsigned int-Wert, der die Mindestanzahl an Parallelitätsressourcen angibt, die der Planer verwendet.

1

TargetOversubscriptionFactor

Ein unsigned int-Wert, der angibt, wie viele Threads jeder Verarbeitungsressource zuzuordnen sind.

1

LocalContextCacheSize

Ein unsigned int-Wert, der die maximale Anzahl an Kontexten angibt, die in der lokalen Warteschlange jedes virtuellen Prozessors zwischengespeichert werden können.

8

ContextStackSize

Ein unsigned int-Wert, der die Größe des für jeden Kontext zu reservierenden Stapels in KB angibt.

0 = Standardstapelgröße verwenden

ContextPriority

Ein int-Wert, der die Threadpriorität der einzelnen Kontexte angibt. Dies kann jeder Wert sein, der sich an SetThreadPriority oder INHERIT_THREAD_PRIORITY übergeben lässt.

THREAD_PRIORITY_NORMAL

SchedulingProtocol

Ein Concurrency::SchedulingProtocolType-Wert, der den zu verwendenden Planungsalgorithmus angibt.

EnhanceScheduleGroupLocality

DynamicProgressFeedback

Ein Concurrency::DynamicProgressFeedbackType-Wert, der angibt, ob Ressourcen anhand von statistikbasierten Statusinformationen neu verteilt werden sollen.

Hinweis   Legen Sie diese Richtlinie nicht auf ProgressFeedbackDisabled fest. ProgressFeedbackDisabled ist für die Verwendung durch die Runtime reserviert.

ProgressFeedbackEnabled

Jeder Planer verwendet eine eigene Richtlinie beim Planen von Aufgaben. Die einem Planer zugeordneten Richtlinien haben also keine Auswirkung auf das Verhalten anderer Planer. Nach dem Erstellen des Scheduler-Objekts können Sie die Planerrichtlinie außerdem nicht mehr ändern.

Wichtig

Steuern Sie die Attribute für Threads, die von der Laufzeit erstellt werden, nur mit Planerrichtlinien. Das Ändern der Affinität oder Priorität von Threads, die von der Laufzeit erstellt werden, führt zu einem nicht definierten Verhalten.

Wenn Sie nicht explizit einen Standardplaner erstellen, wird dieser von der Laufzeit für Sie erstellt. Wenn Sie den Standardplaner in der Anwendung verwenden, jedoch eine Richtlinie dafür angeben möchten, rufen Sie die Concurrency::Scheduler::SetDefaultSchedulerPolicy-Methode auf, bevor Sie eine parallele Verarbeitung planen. Wenn Sie die Scheduler::SetDefaultSchedulerPolicy-Methode nicht aufrufen, verwendet die Runtime die in der Tabelle aufgeführten Standardrichtlinienwerte.

Mit der Concurrency::CurrentScheduler::GetPolicy-Methode und mit der Concurrency::Scheduler::GetPolicy-Methode können Sie eine Kopie der Planerrichtlinie abrufen. Die von diesen Methoden zurückgegebenen Richtlinienwerte können von den Richtlinienwerten abweichen, die Sie beim Erstellen des Planers angeben. Der UMSThreadDefault-Richtlinienwert gibt z. B. an, dass der Planer UMS-Threads verwendet, wenn diese Funktion im Betriebssystem vorhanden ist (wie in der 64-Bit-Version von Windows 7). Wenn UMS-Threads nicht verfügbar sind, legt der Planer diesen Richtlinienwert auf ThreadScheduler fest, sodass normale Threads verwendet werden.

Beispiel

Beispiele, in denen bestimmte Planerrichtlinien zur Steuerung des Planerverhaltens verwendet werden, finden Sie unter Gewusst wie: Angeben von bestimmten Planerrichtlinien und Gewusst wie: Erstellen von Agents, die bestimmte Planerrichtlinien verwenden.

Siehe auch

Aufgaben

Gewusst wie: Angeben von bestimmten Planerrichtlinien

Gewusst wie: Erstellen von Agents, die bestimmte Planerrichtlinien verwenden

Konzepte

Taskplaner (Concurrency Runtime)

Änderungsprotokoll

Datum

Versionsgeschichte

Grund

Juli 2010

Inhalt neu strukturiert.

Informationsergänzung.