Skupiny rozvrhů

Tento dokument popisuje roli skupin plánů v modulu Concurrency Runtime. Seskupení skupiny plánů seskupí související úkoly. Každý plánovač má jednu nebo více skupin plánů. Skupiny plánů použijte v případě, že potřebujete vysoký stupeň umístění mezi úkoly, například když skupina souvisejících úkolů těží z provádění na stejném uzlu procesoru. Naopak používejte instance plánovače, pokud má vaše aplikace specifické požadavky na kvalitu, například pokud chcete omezit množství prostředků zpracování, které jsou přiděleny sadě úkolů. Další informace o instancích plánovače najdete v tématu Instance plánovače.

Návod

Concurrency Runtime poskytuje výchozí plánovač, a proto ho v aplikaci nemusíte 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.

Každý Scheduler objekt má výchozí skupinu plánů pro každý plánovací uzel. Plánovací uzel odpovídá základní topologii systému. Modul runtime vytvoří jeden plánovací uzel pro každý balíček procesoru nebo uzel NUMA (Non-Uniform Memory Architecture), podle toho, jaké číslo je větší. Pokud úkol explicitně nepřidružíte ke skupině plánů, plánovač zvolí, do které skupiny chcete úkol přidat.

Zásady SchedulingProtocol plánovače ovlivňují pořadí, ve kterém plánovač provádí úlohy v každé skupině plánů. Pokud SchedulingProtocol je nastavená hodnota EnhanceScheduleGroupLocality (což je výchozí), plánovač úloh zvolí další úkol ze skupiny plánů, na které pracuje, když se aktuální úkol dokončí nebo bude spolupracovat. Plánovač úloh prohledá aktuální skupinu úloh, než se přesune do další dostupné skupiny. SchedulingProtocol Pokud je c1> naopak nastaven EnhanceForwardProgress, plánovač se po dokončení nebo při uvolnění každého úkolu přesune na další skupinu plánování. Příklad, který porovnává tyto zásady, najdete v tématu Postupy: Použití skupin plánu k ovlivnění pořadí provádění.

Modul runtime používá třídu concurrency::ScheduleGroup k reprezentaci skupin plánů. Chcete-li vytvořit ScheduleGroup objekt, zavolejte concurrency::CurrentScheduler::CreateScheduleGroup nebo concurrency::Scheduler::CreateScheduleGroup metoda. Modul runtime používá mechanismus počítání odkazů k řízení životnosti ScheduleGroup objektů, stejně jako u Scheduler objektů. Při vytváření objektu ScheduleGroup modul runtime nastaví referenční čítač na jeden. Metoda concurrency::ScheduleGroup::Reference zvýší čítač referencí o jeden. Metoda concurrency::ScheduleGroup::Release sníží referenční čítač o jeden.

Mnoho typů v modulu Concurrency Runtime umožňuje přidružit objekt společně se skupinou plánů. Například třída concurrency::agent a třídy bloku zpráv, jako jsou concurrency::unbounded_buffer, concurrency::join a concurrency::timer, poskytují přetížené verze konstruktoru, které převezmou objekt ScheduleGroup. Modul runtime používá Scheduler objekt přidružený k tomuto ScheduleGroup objektu k naplánování úlohy.

K naplánování zjednodušené úlohy můžete také použít metodu concurrency::ScheduleGroup::ScheduleTask . Další informace o jednoduchých úkolech naleznete v tématu Zjednodušené úlohy.

Příklad

Příklad, který používá skupiny plánů k řízení pořadí provádění úkolů, naleznete v tématu Postupy: Použití skupin plánu k ovlivnění pořadí provádění.

Viz také

Plánovač úloh
Instance plánovačů
Postupy: Použití skupin plánů k ovlivnění pořadí provádění