Udostępnij za pośrednictwem


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::Detachwywoł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