Skupiny plánů

Tento dokument popisuje roli skupin plánů v modulu Concurrency Runtime. Spřažení skupin plánů nebo skupin 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.

Tip

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 se mapuje na 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 vyhledá aktuální skupinu plánů před přesunutím do další dostupné skupiny. SchedulingProtocol Pokud je naopak nastavena EnhanceForwardProgressmožnost , plánovač se po dokončení nebo výnosu každého úkolu přesune na další skupinu plánu. 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č odkazu 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řídy concurrency::agent třídy a třídy bloku zpráv, jako je concurrency::unbounded_buffer, concurrency::join a concurrency::timer, poskytují přetížené verze konstruktoru, který přebírají ScheduleGroup objekt. 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če
Postupy: Použití skupin plánů k ovlivnění pořadí provádění