Instance plánovače
Tento dokument popisuje roli Plánovač instancí v souběžném běhu a použití concurrency::Scheduler a concurrency::CurrentScheduler k vytvoření a správě Plánovač instance třídy.Plánovač instance jsou užitečné, pokud chcete přidružit explicitní zásady plánování určité typy pracovního vytížení.Můžete například vytvořit jednu instanci služby Plánovač spustit některé úkoly prioritou zvýšenými podprocesu a použít výchozí plánovač spustit podproces s normální prioritou další úkoly.
Tip
Runtime souběžnost poskytuje výchozí Plánovač, a proto není nutné ji vytvořit v aplikaci.Protože služba Plánovač úloh pomáhá optimalizovat výkon aplikací, doporučujeme spuštění se Knihovna PPL (Parallel Patterns Library) nebo Knihovna asynchronních agentů Pokud runtime souběžnosti.
Oddíly
Plánovač a třídy CurrentScheduler
Vytváření Instance Plánovač
Správa životnosti Instance Plánovač
Metody a funkce
Příklad
Plánovač a třídy CurrentScheduler
Plánovač úloh umožňuje aplikacím používat jeden nebo více Plánovač instance k plánování práce.Concurrency::Scheduler třída představuje instanci služby Plánovač a zapouzdří funkce vztahující se k plánování úkolů.
Podproces, který je připojen k Plánovač je označován jako kontextu spuštění, nebo pouze kontextu.Jeden Plánovač může být kdykoli aktivní v aktuálním kontextu.Aktivní Plánovač je známá také jako aktuální Plánovač.Runtime souběžnosti používá concurrency::CurrentScheduler třídy poskytnout přístup k aktuálním plánovače.Aktuální Plánovač jednoho kontextu se může lišit od aktuálního Plánovač jiného kontextu.Modul runtime neposkytuje úroveň procesu reprezentace aktuální Plánovač.
Obvykle CurrentScheduler třídy slouží k přístupu k aktuální plánovače.Scheduler Třídy je užitečné, pokud potřebujete spravovat Plánovač, který není aktuální.
Následující části popisují, jak vytvořit a spravovat Plánovač instance.Kompletní příklad, který znázorňuje tyto úkoly, viz Postupy: Správa instance plánovače.
Top
Vytváření Instance Plánovač
Existují tyto tři způsoby, jak vytvořit Scheduler objekt:
Pokud neexistuje žádný Plánovač, runtime vytvoří výchozí Plánovač můžete při použití funkce runtime, například paralelní algoritmus k práci.Výchozí Plánovač se stane aktuální Plánovač kontextu iniciované paralelní práce.
Concurrency::CurrentScheduler::Create metoda vytvoří Scheduler objekt, který používá určité zásady a přidruží tuto Plánovač aktuální kontext.
Concurrency::Scheduler::Create metoda vytvoří Scheduler objekt, který používá určité zásady, ale nelze jej spojit s aktuální kontext.
Všechny úkoly souběžných sdílet stejné Plánovač umožňující runtime vytvořit výchozí Plánovač umožňuje.Obvykle funkce poskytované Paralelní knihovnu vzorků (PPL) nebo Asynchronní agenti knihovny se používá k provedení práce paralelní.Proto není třeba pracovat Plánovač řídit jeho zásad nebo životnost.Při použití PPL nebo agenti knihovny runtime vytvoří výchozí Plánovač, pokud neexistuje a usnadňuje aktuální Plánovač pro každý kontext.Při vytváření Plánovač a nastavit jako aktuální Plánovač pak používá tento Plánovač runtime plánovat úlohy.Vytvořte instance dalších Plánovač pouze tehdy, vyžadují specifické zásady plánování.Další informace o zásady, které jsou přidruženy Plánovač viz Zásady plánovače.
Top
Správa životnosti Instance Plánovač
Používá runtime počítání odkazů mechanismus řízení životnosti Scheduler objektů.
Při použití CurrentScheduler::Create metoda nebo Scheduler::Create k vytvoření Scheduler objektu modulu runtime nastaví počáteční referenční počet Plánovač, že jeden.Modul runtime zvýší počet odkazů při volání concurrency::Scheduler::Attach metoda.Scheduler::Attach Metoda associates Scheduler spolu s aktuální kontext objektu.Tím je aktuální plánovače.Při volání CurrentScheduler::Create metoda, vytvoří runtime i Scheduler objektu připojí k aktuální kontext (a nastaví počet odkazů na jeden).Můžete také použít concurrency::Scheduler::Reference zvýšit počet referenční metody Scheduler objektu.
Snížení hodnoty runtime odkazu počítat při volání concurrency::CurrentScheduler::Detach metody odpojit aktuální Plánovač nebo zavolejte concurrency::Scheduler::Release metoda.Nula dosáhne počet odkazů ničí modulu runtime Scheduler objektu po všech naplánováno dokončení úkolů.Spuštěnou úlohu může zvýšit počet odkazů aktuální plánovače.Proto pokud počet odkazů dosáhne nuly a úkol zvýší počet odkazů, modul runtime není zničení Scheduler objektu, dokud počet odkazů znovu dosáhne nuly a dokončit všechny úkoly.
Vnitřní zásobník udržuje runtime Scheduler objektů v každém kontextu.Při volání Scheduler::Attach nebo CurrentScheduler::Create metoda runtime tlačí, Scheduler objektu do zásobníku v aktuálním kontextu.Tím je aktuální plánovače.Při volání CurrentScheduler::Detach, modul runtime POP aktuální Plánovač ze zásobníku pro aktuální kontext a nastaví jako aktuální Plánovač předchozímu.
Běhový modul Správa životnosti Plánovač instance několika způsoby.Následující tabulka uvádí odpovídající metodu, která uvolní nebo odpojí Plánovač z aktuálního kontextu pro každou metodu, která vytvoří nebo připojí k aktuální kontext plánovače.
Vytvořit nebo připojit metoda |
Uvolnění nebo odpojit metoda |
---|---|
CurrentScheduler::Create |
CurrentScheduler::Detach |
Scheduler::Create |
Scheduler::Release |
Scheduler::Attach |
CurrentScheduler::Detach |
Scheduler::Reference |
Scheduler::Release |
Volání nevhodné uvolnit nebo odpojit metoda vytvoří nespecifikované chování v modulu runtime.
Při použití funkce, například PPL, způsobující runtime vytvořit výchozí Plánovač můžete uvolnit nebo odpojit tento Plánovač.Modul runtime spravuje platnosti libovolné Plánovač, který vytvoří.
Protože runtime nelze zničit Scheduler objektu před dokončení všech úkolů, můžete použít concurrency::Scheduler::RegisterShutdownEvent metoda nebo concurrency::CurrentScheduler::RegisterShutdownEvent metoda přijímat oznámení při Scheduler objektu.To je užitečné, když Každá úloha naplánovaná pomocí musí čekat Scheduler objektu na dokončení.
Top
Metody a funkce
Tato část shrnuje důležité metody CurrentScheduler a Scheduler tříd.
Představte si, že CurrentScheduler třídy jako pomocníka pro vytváření Plánovač pro použití v aktuálním kontextu.Scheduler Třídy umožňuje řídit Plánovač, který patří do jiného kontextu.
Následující tabulka zobrazuje důležité metody, které jsou definovány CurrentScheduler třídy.
Metoda |
Description |
---|---|
Vytvoří Scheduler objekt, který používá zadané zásady a přidruží jej k aktuálnímu kontextu. |
|
Ukazatel se získá Scheduler objekt, který je přidružen k aktuálnímu kontextu.Tato metoda nezvýší počet odkaz Scheduler objektu. |
|
Odpojí aktuální Plánovač z aktuálního kontextu a nastaví jako aktuální Plánovač předchozímu. |
|
Registruje událost modulu runtime nastaví při aktuální Plánovač zničen. |
|
Vytvoří concurrency::ScheduleGroup objektu v aktuální plánovače. |
|
Přidá plánování Fronta plánovače aktuální lehký úkol. |
|
Získá kopii zásady, která je spojena s aktuální plánovače. |
Následující tabulka zobrazuje důležité metody, které jsou definovány Scheduler třídy.
Metoda |
Description |
---|---|
Vytvoří Scheduler objekt, který používá zadané zásady. |
|
Přidruží Scheduler spolu s aktuální kontext objektu. |
|
Zvyšuje hodnotu čítače odkaz Scheduler objektu. |
|
Sníží Čítač odkaz Scheduler objektu. |
|
Registruje události, která nastaví modulu runtime, kdy Scheduler objektu. |
|
Vytvoří concurrency::ScheduleGroup v objektu Scheduler objektu. |
|
Naplánuje lehký úkol z Scheduler objektu. |
|
Získá kopii zásady, která je přidružena Scheduler objektu. |
|
Nastaví zásady runtime při vytvoří výchozí plánovače. |
|
Obnoví výchozí nastavení zásad, který byl aktivní volání před SetDefaultSchedulerPolicy.Pokud Plánovač výchozí po volání používá runtime Plánovač vytvořit výchozí nastavení zásad. |
Top
Příklad
Základní příklady, jak vytvořit a spravovat instance Plánovač viz Postupy: Správa instance plánovače.
Viz také
Úkoly
Postupy: Správa instance plánovače