Zásady plánovače
Tento dokument popisuje úlohu plánovače zásady v modulu Runtime souběžnosti.A zásad Plánovač strategie, kterou Plánovač používá při správě úloh Ovládací prvky.Zvažte například aplikaci, která vyžaduje některé úlohy ke spuštění v THREAD_PRIORITY_NORMAL a dalších úloh ke spuštění na THREAD_PRIORITY_HIGHEST. Můžete vytvořit dvě instance Plánovač: jeden, který určuje, ContextPriority zásad THREAD_PRIORITY_NORMAL a druhý, který určuje stejné zásady jako THREAD_PRIORITY_HIGHEST.
Pomocí plánovače zásady můžete rozdělit prostředky procesoru a přiřadit pevnou sadu prostředků pro každý plánovač.Příkladem paralelního algoritmu, který není adekvátní za čtyři procesory.Můžete vytvořit zásadu Plánovač, která omezuje jeho úkoly souběžně používat více než čtyři procesory.
Tip
Concurrency Runtime poskytuje výchozí plánovač.Proto není nutné vytvořit v aplikaci.Vzhledem k tomu, že služba Plánovač úloh umožňuje optimalizovat výkon aplikací, doporučujeme vám začít s Knihovna PPL (Parallel Patterns Library) nebo Knihovna asynchronních agentů Pokud začínáte runtime souběžnosti.
Při použití concurrency::CurrentScheduler::Create, concurrency::Scheduler::Create, nebo concurrency::Scheduler::SetDefaultSchedulerPolicy metoda vytvořit instanci Plánovač zadáte concurrency::SchedulerPolicy objekt, který obsahuje kolekci dvojice klíče a hodnoty, které určují chování plánovače.SchedulerPolicy Konstruktor přijímá proměnný počet argumentů.První argument je počet prvků zásad, které chcete zadat.Zbývající argumenty jsou dvojice klíče a hodnoty pro každý prvek zásad.Následující příklad vytvoří SchedulerPolicy objekt, který určuje tři prvky zásady.Modul runtime používá výchozí hodnoty zásad klíčů, které nejsou určeny.
SchedulerPolicy policy(3,
MinConcurrency, 2,
MaxConcurrency, 4,
ContextPriority, THREAD_PRIORITY_HIGHEST
);
Concurrency::PolicyElementKey výčet definuje zásady klíče, které jsou spojeny s Plánovačem úloh.Následující tabulka popisuje zásady klíče a výchozí hodnotu, která používá modul runtime pro každý z nich.
Klíč zásad |
Description |
Výchozí hodnota |
---|---|---|
SchedulerKind |
A concurrency::SchedulerType hodnotu, která určuje typ podprocesů, které lze použít k naplánování úlohy. |
ThreadScheduler(pomocí běžných podprocesů).Toto je jediná platná hodnota tohoto klíče. |
MaxConcurrency |
unsigned int Hodnota, která určuje maximální počet souběžnosti prostředky, které Plánovač používá. |
|
MinConcurrency |
unsigned int Hodnota, která určuje minimální počet souběžnosti prostředky, které Plánovač používá. |
1 |
TargetOversubscriptionFactor |
unsigned int Hodnota, která určuje, kolik podprocesy pro každý prostředek zpracování. |
1 |
LocalContextCacheSize |
unsigned int Hodnota, která určuje maximální počet kontextů, které mohou být uloženy v mezipaměti v místní frontě každý virtuální procesor. |
8 |
ContextStackSize |
unsigned int Hodnota, která určuje velikost zásobníku, v kilobajtech, rezervace pro každý kontext. |
0(použít výchozí velikost zásobníku) |
ContextPriority |
int Hodnota, která určuje prioritu podprocesu každé kontextu.To může být libovolná hodnota, kterou lze předat SetThreadPriority nebo INHERIT_THREAD_PRIORITY. |
THREAD_PRIORITY_NORMAL |
SchedulingProtocol |
A concurrency::SchedulingProtocolType hodnota, která určuje plánovací algoritmus použitý. |
EnhanceScheduleGroupLocality |
DynamicProgressFeedback |
A concurrency::DynamicProgressFeedbackType hodnota, která určuje, zda má vyrovnání zdrojů podle pokroku na základě statistických informací. Poznámka: není tato zásada nastavena na ProgressFeedbackDisabled vzhledem k tomu, že je vyhrazena pro použití v modulu runtime. |
ProgressFeedbackEnabled |
Každý Plánovač používá své vlastní zásady při jeho plánování úkolů.Zásady, které jsou přidruženy k jedné Plánovač nemá vliv na chování ostatních plánovač.Navíc nelze změnit zásady Plánovač po vytvoření Scheduler objektu.
Důležité |
---|
Určit atributy pro vlákna, modul runtime vytvoří pomocí pouze zásady plánovač.Neměňte příbuznosti podprocesu nebo prioritu podprocesů, které jsou vytvořeny modulem runtime, protože může způsobit nedefinované chování. |
Modul runtime vytvoří výchozí plánovač pro vás, pokud nevytvoříte explicitně jeden.Pokud chcete použít výchozí plánovač v aplikaci, ale chcete zadat zásady pro tento plánovač použít, zavolejte concurrency::Scheduler::SetDefaultSchedulerPolicy metoda před plánování paralelní práce.Pokud nezavoláte Scheduler::SetDefaultSchedulerPolicy metody, modul runtime používá zásady výchozí hodnoty z tabulky.
Použití concurrency::CurrentScheduler::GetPolicy a concurrency::Scheduler::GetPolicy metody načíst kopii zásady plánovač.Hodnoty zásad, které obdržíte z těchto metod se mohou lišit od hodnoty zásad, které zadáte při vytvoření plánovače.
Příklad
Přezkoumat příkladů použití určité Plánovač zásady pro řízení chování Plánovač, viz Postupy: Určení specifických zásad plánovače a Postupy: Vytváření agentů využívajících specifické zásady plánovače.
Viz také
Úkoly
Postupy: Určení specifických zásad plánovače
Postupy: Vytváření agentů využívajících specifické zásady plánovače