Grupy harmonogramu
W tym dokumencie opisano rolę grup harmonogramu w środowisku uruchomieniowym współbieżności. Grupa harmonogramu affinitizes lub grupy, powiązane zadania razem. Każdy harmonogram ma co najmniej jedną grupę harmonogramu. Użyj grup harmonogramu, gdy wymagane jest duże lokalne środowisko między zadaniami, na przykład gdy grupa powiązanych zadań korzysta z wykonywania w tym samym węźle procesora. Z drugiej strony należy używać wystąpień harmonogramu, gdy aplikacja ma określone wymagania dotyczące jakości, na przykład gdy chcesz ograniczyć ilość zasobów przetwarzania przydzielonych do zestawu zadań. Aby uzyskać więcej informacji na temat wystąpień harmonogramu, zobacz Wystąpienia usługi Scheduler.
Napiwek
Środowisko uruchomieniowe współbieżności udostępnia domyślny harmonogram, dlatego nie jest wymagane utworzenie go w aplikacji. Ponieważ harmonogram zadań ułatwia dostosowanie wydajności aplikacji, zalecamy rozpoczęcie od biblioteki równoległych wzorców (PPL) lub biblioteki agentów asynchronicznych, jeśli dopiero zaczynasz pracę ze środowiskiem uruchomieniowym współbieżności.
Każdy Scheduler
obiekt ma domyślną grupę harmonogramu dla każdego węzła planowania. Węzeł planowania jest mapowy na podstawową topologię systemu. Środowisko uruchomieniowe tworzy jeden węzeł planowania dla każdego pakietu procesora lub węzła Architektury NUMA (Non-Uniform Memory Architecture), w zależności od tego, która liczba jest większa. Jeśli nie skojarzysz jawnie zadania z grupą harmonogramu, harmonogram wybierze grupę, do której ma zostać dodane zadanie.
Zasady SchedulingProtocol
harmonogramu mają wpływ na kolejność, w jakiej harmonogram wykonuje zadania w każdej grupie harmonogramu. Gdy SchedulingProtocol
jest ustawiona wartość EnhanceScheduleGroupLocality
(która jest domyślna), harmonogram zadań wybiera następne zadanie z grupy harmonogramu, nad którą pracuje, gdy bieżące zadanie zakończy lub spółdzielnie daje. Harmonogram zadań wyszukuje bieżącą grupę harmonogramu pracy przed przejściem do następnej dostępnej grupy. Z drugiej strony, gdy SchedulingProtocol
jest ustawiona na EnhanceForwardProgress
wartość , harmonogram przechodzi do następnej grupy harmonogramu po zakończeniu lub wydajności każdego zadania. Aby zapoznać się z przykładem porównującym te zasady, zobacz Instrukcje: Używanie grup harmonogramu do wywierania wpływu na kolejność wykonywania.
Środowisko uruchomieniowe używa klasy concurrency::ScheduleGroup do reprezentowania grup harmonogramu. Aby utworzyć obiekt, wywołaj metodę ScheduleGroup
concurrency::CurrentScheduler::CreateScheduleGroup lub concurrency::Scheduler::CreateScheduleGroup . Środowisko uruchomieniowe używa mechanizmu zliczania odwołań do kontrolowania okresu istnienia ScheduleGroup
obiektów, podobnie jak w przypadku Scheduler
obiektów. Podczas tworzenia ScheduleGroup
obiektu środowisko uruchomieniowe ustawia licznik odwołania na jeden. Współbieżność ::ScheduleGroup::Reference , metoda zwiększa licznik odwołań o jeden. Współbieżność ::ScheduleGroup::Release , metoda dekrementuje licznik odwołań o jeden.
Wiele typów w środowisku uruchomieniowym współbieżności umożliwia skojarzenie obiektu wraz z grupą harmonogramu. Na przykład klasy concurrency::agent i klasy bloków komunikatów, takie jak concurrency::unbounded_buffer, concurrency::join i concurrency::timer, zapewniają przeciążone wersje konstruktora, które przyjmują ScheduleGroup
obiekt. Środowisko uruchomieniowe używa obiektu skojarzonego Scheduler
z tym ScheduleGroup
obiektem, aby zaplanować zadanie.
Możesz również użyć metody concurrency::ScheduleGroup::ScheduleTask , aby zaplanować uproszczone zadanie. Aby uzyskać więcej informacji na temat lekkich zadań, zobacz Lightweight Tasks (Uproszczone zadania).
Przykład
Aby zapoznać się z przykładem, który używa grup harmonogramu do kontrolowania kolejności wykonywania zadań, zobacz Instrukcje: Używanie grup harmonogramu do wywierania wpływu na kolejność wykonywania.
Zobacz też
Harmonogram zadań
Wystąpienia harmonogramu
Instrukcje: używanie grup harmonogramu do wywierania wpływu na kolejność wykonywania