Sdílet prostřednictvím


Zásady plánovače

Tento dokument popisuje roli zásad plánovače v modulu Concurrency Runtime. Zásady plánovače řídí strategii, kterou plánovač používá při správě úloh. Představte si například aplikaci, která vyžaduje, aby se některé úlohy spouštěly v THREAD_PRIORITY_NORMAL aplikaci a jiné úlohy, na THREAD_PRIORITY_HIGHESTkteré se má provést . Můžete vytvořit dvě instance plánovače: jednu, která určuje zásadu ContextPriority , která má být THREAD_PRIORITY_NORMAL , a druhou, která určuje stejnou zásadu, která má být THREAD_PRIORITY_HIGHEST.

Pomocí zásad plánovače můžete rozdělit dostupné prostředky zpracování a přiřadit k jednotlivým plánovačům pevnou sadu prostředků. Představte si například paralelní algoritmus, který se nesrovná nad rámec čtyř procesorů. Můžete vytvořit zásadu plánovače, která omezuje její úlohy tak, aby současně nepoužíly více než čtyři procesory.

Tip

Modul Concurrency Runtime poskytuje výchozí plánovač. Proto ho nemusíte ve své aplikaci vytvářet. Vzhledem k tomu, že plánovač úloh pomáhá vyladit výkon vašich aplikací, doporučujeme začít knihovnou PPL (Parallel Patterns Library) nebo knihovnou asynchronních agentů , pokud s modulem Concurrency Runtime začínáte.

Pokud použijete concurrency::CurrentScheduler::Create, concurrency::Scheduler::Create nebo concurrency::Scheduler::SetDefaultSchedulerPolicy k vytvoření instance plánovače, poskytnete souběžnost::SchedulerPolicy objekt, který obsahuje kolekci párů klíč-hodnota, které určují chování plánovače. Konstruktor SchedulerPolicy přebírá proměnný počet argumentů. Prvním argumentem je počet prvků zásad, které chcete zadat. Zbývající argumenty jsou páry klíč-hodnota pro každý prvek zásady. Následující příklad vytvoří SchedulerPolicy objekt, který určuje tři elementy zásad. Modul runtime používá výchozí hodnoty pro klíče zásad, které nejsou zadané.

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

Concurrency ::P olicyElementKey – výčet definuje klíče zásad přidružené k plánovači úloh. Následující tabulka popisuje klíče zásad a výchozí hodnotu, kterou modul runtime používá pro každý z nich.

Klíč zásad Popis Výchozí hodnota
SchedulerKind Hodnota concurrency::SchedulerType , která určuje typ vláken, která se mají použít k plánování úloh. ThreadScheduler (používejte normální vlákna). Toto je jediná platná hodnota pro tento klíč.
MaxConcurrency Hodnota unsigned int , která určuje maximální počet prostředků souběžnosti, které plánovač používá. concurrency::MaxExecutionResources
MinConcurrency Hodnota unsigned int , která určuje minimální počet prostředků souběžnosti, které plánovač používá. 1
TargetOversubscriptionFactor Hodnota unsigned int , která určuje, kolik vláken má být přiděleno každému prostředku zpracování. 1
LocalContextCacheSize Hodnota unsigned int , která určuje maximální počet kontextů, které lze ukládat do mezipaměti v místní frontě každého virtuálního procesoru. 8
ContextStackSize Hodnota unsigned int , která určuje velikost zásobníku v kilobajtech, která se má rezervovat pro každý kontext. 0 (použijte výchozí velikost zásobníku)
ContextPriority Hodnota int , která určuje prioritu vlákna každého kontextu. Může to být libovolná hodnota, kterou můžete předat SetThreadPriority nebo INHERIT_THREAD_PRIORITY. THREAD_PRIORITY_NORMAL
SchedulingProtocol Hodnota concurrency::SchedulingProtocolType , která určuje algoritmus plánování, který se má použít. EnhanceScheduleGroupLocality
DynamicProgressFeedback Hodnota concurrency::D ynamicProgressFeedbackType , která určuje, jestli se mají prostředky vyrovnát podle informací o průběhu založeném na statistikách.

Poznámka: Nenastavujte tuto zásadu, ProgressFeedbackDisabled protože je vyhrazena pro použití modulem runtime.
ProgressFeedbackEnabled

Každý plánovač používá při plánování úkolů vlastní zásadu. Zásady přidružené k jednomu plánovači nemají vliv na chování žádného jiného plánovače. Kromě toho nelze po vytvoření objektu změnit zásadu plánovače Scheduler .

Důležité

K řízení atributů pro vlákna, která modul runtime vytváří, použijte pouze zásady plánovače. Neměňte spřažení vlákna ani prioritu vláken vytvořených modulem runtime, protože to může způsobit nedefinované chování.

Modul runtime pro vás vytvoří výchozí plánovač, pokud ho explicitně nevytvoříte. Pokud chcete ve své aplikaci použít výchozí plánovač, ale chcete určit zásadu, kterou má plánovač použít, zavolejte metodu concurrency::Scheduler::SetDefaultSchedulerPolicy před plánováním paralelní práce. Pokud metodu Scheduler::SetDefaultSchedulerPolicy nezavoláte, modul runtime použije výchozí hodnoty zásad z tabulky.

Pomocí metod concurrency::CurrentScheduler::GetPolicy a concurrency::Scheduler::GetPolicy načtěte kopii zásady plánovače. Hodnoty zásad, které z těchto metod obdržíte, se mohou lišit od hodnot zásad, které zadáte při vytváření plánovače.

Příklad

Pokud chcete prozkoumat příklady, které používají konkrétní zásady plánovače k řízení chování plánovače, přečtěte si téma Postupy: Určení konkrétních zásad plánovače a postupy: Vytvoření agentů, kteří používají konkrétní zásady plánovače.

Viz také

Plánovač úloh
Postupy: Určení specifických zásad plánovače
Postupy: Vytváření agentů využívajících specifické zásady plánovače