Wystąpienia harmonogramu
W tym dokumencie opisano rolę wystąpień harmonogramu w środowisku uruchomieniowym współbieżności oraz sposób używania wystąpień współbieżności::Scheduler i współbieżności::CurrentScheduler do tworzenia wystąpień harmonogramu i zarządzania nimi. Wystąpienia usługi Scheduler są przydatne, gdy chcesz skojarzyć jawne zasady planowania z określonymi typami obciążeń. Można na przykład utworzyć jedno wystąpienie harmonogramu, aby uruchamiać niektóre zadania z podwyższonym priorytetem wątku i używać domyślnego harmonogramu do uruchamiania innych zadań z normalnym priorytetem wątku.
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.
Sekcje
Klasy Scheduler i CurrentScheduler
Harmonogram zadań umożliwia aplikacjom planowanie pracy przy użyciu co najmniej jednego wystąpienia harmonogramu. Klasa concurrency::Scheduler reprezentuje wystąpienie harmonogramu i hermetyzuje funkcjonalność związaną z planowaniem zadań.
Wątek dołączony do harmonogramu jest nazywany kontekstem wykonywania lub tylko kontekstem. Jeden harmonogram może być aktywny w bieżącym kontekście w dowolnym momencie. Aktywny harmonogram jest również znany jako bieżący harmonogram. Środowisko uruchomieniowe współbieżności używa klasy concurrency::CurrentScheduler w celu zapewnienia dostępu do bieżącego harmonogramu. Bieżący harmonogram dla jednego kontekstu może się różnić od bieżącego harmonogramu dla innego kontekstu. Środowisko uruchomieniowe nie zapewnia reprezentacji bieżącego harmonogramu na poziomie procesu.
Zazwyczaj klasa jest używana do uzyskiwania CurrentScheduler
dostępu do bieżącego harmonogramu. Klasa jest przydatna Scheduler
, gdy musisz zarządzać harmonogramem, który nie jest bieżącym.
W poniższych sekcjach opisano sposób tworzenia wystąpienia harmonogramu i zarządzania nim. Pełny przykład ilustrujący te zadania można znaleźć w temacie How to: Manage a Scheduler Instance (Jak zarządzać wystąpieniem usługi Scheduler).
[Top]
Tworzenie wystąpienia harmonogramu
Istnieją trzy sposoby tworzenia Scheduler
obiektu:
Jeśli harmonogram nie istnieje, środowisko uruchomieniowe tworzy domyślny harmonogram podczas korzystania z funkcji środowiska uruchomieniowego, na przykład algorytmu równoległego, do wykonywania pracy. Domyślny harmonogram staje się bieżącym harmonogramem kontekstu, który inicjuje pracę równoległą.
Współbieżność ::CurrentScheduler::Create metoda tworzy
Scheduler
obiekt, który używa określonych zasad i kojarzy ten harmonogram z bieżącym kontekstem.Współbieżność ::Scheduler::Create metoda tworzy
Scheduler
obiekt, który używa określonych zasad, ale nie kojarzy go z bieżącym kontekstem.
Zezwalanie środowisku uruchomieniowemu na utworzenie domyślnego harmonogramu umożliwia współużytkowanie tych samych współbieżnych zadań. Zazwyczaj funkcja udostępniana przez bibliotekę równoległych wzorców (PPL) lub bibliotekę agentów asynchronicznych jest używana do wykonywania równoległych zadań. W związku z tym nie musisz pracować bezpośrednio z harmonogramem, aby kontrolować jego zasady lub okres istnienia. W przypadku korzystania z biblioteki PPL lub agentów środowisko uruchomieniowe tworzy domyślny harmonogram, jeśli nie istnieje i sprawia, że jest to bieżący harmonogram dla każdego kontekstu. Podczas tworzenia harmonogramu i ustawiania go jako bieżącego harmonogramu środowisko uruchomieniowe używa tego harmonogramu do planowania zadań. Utwórz dodatkowe wystąpienia harmonogramu tylko wtedy, gdy są wymagane określone zasady planowania. Aby uzyskać więcej informacji na temat zasad skojarzonych z harmonogramem, zobacz Zasady harmonogramu.
[Top]
Zarządzanie okresem istnienia wystąpienia usługi Scheduler
Środowisko uruchomieniowe używa mechanizmu zliczania odwołań do kontrolowania Scheduler
okresu istnienia obiektów.
Jeśli używasz CurrentScheduler::Create
metody lub Scheduler::Create
metody do utworzenia Scheduler
obiektu, środowisko uruchomieniowe ustawia początkową liczbę odwołań tego harmonogramu na jeden. Środowisko uruchomieniowe zwiększa liczbę odwołań podczas wywoływania metody concurrency::Scheduler::Attach . Metoda Scheduler::Attach
kojarzy Scheduler
obiekt wraz z bieżącym kontekstem. Dzięki temu jest to bieżący harmonogram. Podczas wywoływania CurrentScheduler::Create
metody środowisko uruchomieniowe tworzy Scheduler
obiekt i dołącza go do bieżącego kontekstu (i ustawia liczbę odwołań na jeden). Można również użyć metody concurrency::Scheduler::Reference , aby zwiększać liczbę Scheduler
odwołań obiektu.
Środowisko uruchomieniowe dekrementuje liczbę odwołań podczas wywoływania metody concurrency::CurrentScheduler::D etach w celu odłączenia bieżącego harmonogramu lub wywołania metody concurrency::Scheduler::Release . Gdy liczba odwołań osiągnie zero, środowisko uruchomieniowe niszczy obiekt po zakończeniu Scheduler
wszystkich zaplanowanych zadań. Uruchomione zadanie może zwiększać liczbę odwołań bieżącego harmonogramu. W związku z tym jeśli liczba odwołań osiągnie zero, a zadanie zwiększa liczbę odwołań, środowisko uruchomieniowe nie niszczy Scheduler
obiektu, dopóki liczba odwołań nie osiągnie ponownie wartości zero i wszystkie zadania zakończą się.
Środowisko uruchomieniowe utrzymuje wewnętrzny stos Scheduler
obiektów dla każdego kontekstu. Podczas wywoływania Scheduler::Attach
metody lub CurrentScheduler::Create
środowisko uruchomieniowe wypycha ten Scheduler
obiekt do stosu dla bieżącego kontekstu. Dzięki temu jest to bieżący harmonogram. Po wywołaniu CurrentScheduler::Detach
wywołania środowisko uruchomieniowe wyświetli bieżący harmonogram ze stosu dla bieżącego kontekstu i ustawia poprzedni jako bieżący harmonogram.
Środowisko uruchomieniowe udostępnia kilka sposobów zarządzania okresem istnienia wystąpienia harmonogramu. W poniższej tabeli przedstawiono odpowiednią metodę, która zwalnia lub odłącza harmonogram od bieżącego kontekstu dla każdej metody, która tworzy lub dołącza harmonogram do bieżącego kontekstu.
Tworzenie lub dołączanie metody | Zwalnianie lub odłączanie metody |
---|---|
CurrentScheduler::Create |
CurrentScheduler::Detach |
Scheduler::Create |
Scheduler::Release |
Scheduler::Attach |
CurrentScheduler::Detach |
Scheduler::Reference |
Scheduler::Release |
Wywołanie niewłaściwej metody wydania lub odłączania powoduje nieokreślone zachowanie w środowisku uruchomieniowym.
Jeśli używasz funkcji, na przykład PPL, co powoduje utworzenie domyślnego harmonogramu przez środowisko uruchomieniowe, nie zwalniaj ani nie odłączaj tego harmonogramu. Środowisko uruchomieniowe zarządza okresem istnienia każdego tworzonego harmonogramu.
Ponieważ środowisko uruchomieniowe nie niszczy obiektu przed zakończeniem Scheduler
wszystkich zadań, można użyć metody concurrency::Scheduler::RegisterShutdownEvent lub współbieżności::CurrentScheduler::RegisterShutdownEvent , aby otrzymać powiadomienie, gdy Scheduler
obiekt zostanie zniszczony. Jest to przydatne, gdy należy poczekać na ukończenie każdego zadania zaplanowanego Scheduler
przez obiekt.
[Top]
Metody i funkcje
W tej sekcji podsumowano ważne metody CurrentScheduler
klas i Scheduler
.
Pomyśl o CurrentScheduler
klasie jako pomocniku do utworzenia harmonogramu do użycia w bieżącym kontekście. Klasa Scheduler
umożliwia kontrolowanie harmonogramu, który należy do innego kontekstu.
W poniższej tabeli przedstawiono ważne metody zdefiniowane przez klasę CurrentScheduler
.
Metoda | opis |
---|---|
Utworzenie | Tworzy Scheduler obiekt, który używa określonych zasad i kojarzy go z bieżącym kontekstem. |
Pobierz | Pobiera wskaźnik do Scheduler obiektu skojarzonego z bieżącym kontekstem. Ta metoda nie zwiększa liczby Scheduler odwołań obiektu. |
Detach | Odłącza bieżący harmonogram od bieżącego kontekstu i ustawia poprzedni jako bieżący harmonogram. |
RegisterShutdownEvent | Rejestruje zdarzenie ustawiane przez środowisko uruchomieniowe po zniszczeniu bieżącego harmonogramu. |
CreateScheduleGroup | Tworzy obiekt concurrency::ScheduleGroup w bieżącym harmonogramie. |
ScheduleTask | Dodaje uproszczone zadanie do kolejki planowania bieżącego harmonogramu. |
GetPolicy | Pobiera kopię zasad skojarzonych z bieżącym harmonogramem. |
W poniższej tabeli przedstawiono ważne metody zdefiniowane przez klasę Scheduler
.
Metoda | opis |
---|---|
Utworzenie | Tworzy Scheduler obiekt, który używa określonych zasad. |
Attach | Scheduler Kojarzy obiekt wraz z bieżącym kontekstem. |
Odwołanie | Zwiększa licznik Scheduler odwołań obiektu. |
Wydanie | Dekrementuje licznik Scheduler odwołań obiektu. |
RegisterShutdownEvent | Rejestruje zdarzenie ustawiane przez środowisko uruchomieniowe podczas Scheduler niszczenia obiektu. |
CreateScheduleGroup | Tworzy obiekt concurrency::ScheduleGroup w Scheduler obiekcie. |
ScheduleTask | Planuje lekkie zadanie z Scheduler obiektu. |
GetPolicy | Pobiera kopię zasad skojarzonych z obiektem Scheduler . |
SetDefaultSchedulerPolicy | Ustawia zasady dla środowiska uruchomieniowego do użycia podczas tworzenia domyślnego harmonogramu. |
ResetDefaultSchedulerPolicy | Przywraca domyślne zasady do tej, która była aktywna przed wywołaniem metody SetDefaultSchedulerPolicy . Jeśli domyślny harmonogram jest tworzony po tym wywołaniu, środowisko uruchomieniowe używa domyślnych ustawień zasad do utworzenia harmonogramu. |
[Top]
Przykład
Aby zapoznać się z podstawowymi przykładami tworzenia wystąpienia harmonogramu i zarządzania nim, zobacz How to: Manage a Scheduler Instance (Jak zarządzać wystąpieniem harmonogramu).
Zobacz też
Harmonogram zadań
Instrukcje: zarządzanie wystąpieniem harmonogramu
Zasady harmonogramu
Grupy harmonogramu