Udostępnij przez


Zasady harmonogramu

W tym dokumencie opisano rolę zasad harmonogramu w środowisku uruchomieniowym współbieżności. Zasady harmonogramu steruje strategią używaną przez harmonogram podczas zarządzania zadaniami. Rozważmy na przykład aplikację, która wymaga wykonania niektórych zadań podrzędnych i THREAD_PRIORITY_NORMAL innych zadań do wykonania w .THREAD_PRIORITY_HIGHEST Można utworzyć dwa wystąpienia harmonogramu: jeden, który określa ContextPriority zasady, a THREAD_PRIORITY_NORMAL drugi, który określa te same zasady na THREAD_PRIORITY_HIGHESTwartość .

Korzystając z zasad harmonogramu, można podzielić dostępne zasoby przetwarzania i przypisać stały zestaw zasobów do każdego harmonogramu. Rozważmy na przykład algorytm równoległy, który nie jest skalowany poza cztery procesory. Można utworzyć zasady harmonogramu, które ograniczają jego zadania do jednoczesnego używania nie więcej niż czterech procesorów.

Napiwek

Środowisko uruchomieniowe współbieżności udostępnia domyślny harmonogram. W związku z tym nie trzeba jej tworzyć 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.

Jeśli używasz współbieżności::CurrentScheduler::Create, concurrency::Scheduler::Create lub concurrency::Scheduler::SetDefaultSchedulerPolicy , aby utworzyć wystąpienie harmonogramu, należy podać współbieżność::SchedulerPolicy obiekt zawierający kolekcję par klucz-wartość, które określają zachowanie harmonogramu. Konstruktor SchedulerPolicy przyjmuje zmienną liczbę argumentów. Pierwszym argumentem jest liczba elementów zasad, które mają być określone. Pozostałe argumenty to pary klucz-wartość dla każdego elementu zasad. Poniższy przykład tworzy SchedulerPolicy obiekt, który określa trzy elementy zasad. Środowisko uruchomieniowe używa wartości domyślnych dla kluczy zasad, które nie są określone.

SchedulerPolicy policy(3,       
   MinConcurrency, 2,
   MaxConcurrency, 4,
   ContextPriority, THREAD_PRIORITY_HIGHEST
);

Wyliczenie concurrency::P olicyElementKey definiuje klucze zasad skojarzone z harmonogramem zadań. W poniższej tabeli opisano klucze zasad i wartość domyślną używaną przez środowisko uruchomieniowe dla każdego z nich.

Klucz zasad opis Wartość domyślna
SchedulerKind Współbieżność ::SchedulerType wartość określająca typ wątków używanych do planowania zadań. ThreadScheduler (używaj normalnych wątków). Jest to jedyna prawidłowa wartość dla tego klucza.
MaxConcurrency Wartość unsigned int określająca maksymalną liczbę zasobów współbieżności używanych przez harmonogram. concurrency::MaxExecutionResources
MinConcurrency Wartość określająca unsigned int minimalną liczbę zasobów współbieżności używanych przez harmonogram. 1
TargetOversubscriptionFactor Wartość określająca unsigned int liczbę wątków do przydzielenia do każdego zasobu przetwarzania. 1
LocalContextCacheSize Wartość unsigned int określająca maksymalną liczbę kontekstów, które można buforować w lokalnej kolejce każdego procesora wirtualnego. 8
ContextStackSize unsigned int Wartość określająca rozmiar stosu w kilobajtach do zarezerwowania dla każdego kontekstu. 0 (użyj domyślnego rozmiaru stosu)
ContextPriority int Wartość określająca priorytet wątku każdego kontekstu. Może to być dowolna wartość, którą można przekazać do parametru SetThreadPriority lub INHERIT_THREAD_PRIORITY. THREAD_PRIORITY_NORMAL
SchedulingProtocol Współbieżność ::SchedulingProtocolType wartość określająca algorytm planowania do użycia. EnhanceScheduleGroupLocality
DynamicProgressFeedback Współbieżność ::D ynamicProgressFeedbackType , która określa, czy ponownie zrównoważyć zasoby zgodnie z informacjami o postępie opartym na statystykach.

Uwaga Nie należy ustawiać tych zasad na ProgressFeedbackDisabled , ponieważ są zarezerwowane do użytku przez środowisko uruchomieniowe.
ProgressFeedbackEnabled

Każdy harmonogram używa własnych zasad podczas planowania zadań. Zasady skojarzone z jednym harmonogramem nie wpływają na zachowanie żadnego innego harmonogramu. Ponadto nie można zmienić zasad harmonogramu po utworzeniu Scheduler obiektu.

Ważne

Użyj tylko zasad harmonogramu, aby kontrolować atrybuty dla wątków tworzonych przez środowisko uruchomieniowe. Nie należy zmieniać koligacji wątków ani priorytetu wątków tworzonych przez środowisko uruchomieniowe, ponieważ może to spowodować niezdefiniowane zachowanie.

Środowisko uruchomieniowe tworzy domyślny harmonogram, jeśli nie zostanie jawnie utworzony. Jeśli chcesz użyć domyślnego harmonogramu w aplikacji, ale chcesz określić zasady dla tego harmonogramu do użycia, przed zaplanowaniem równoległej pracy wywołaj metodę concurrency::Scheduler::SetDefaultSchedulerPolicy . Jeśli nie wywołasz Scheduler::SetDefaultSchedulerPolicy metody, środowisko uruchomieniowe używa domyślnych wartości zasad z tabeli.

Użyj współbieżności::CurrentScheduler::GetPolicy i współbieżności::Scheduler::GetPolicy, aby pobrać kopię zasad harmonogramu. Wartości zasad otrzymywane z tych metod mogą różnić się od wartości zasad określonych podczas tworzenia harmonogramu.

Przykład

Aby zapoznać się z przykładami, które używają określonych zasad harmonogramu do kontrolowania zachowania harmonogramu, zobacz Instrukcje: Określanie określonych zasad harmonogramu i Instrukcje: tworzenie agentów korzystających z określonych zasad harmonogramu.

Zobacz też

Harmonogram zadań
Instrukcje: określanie specjalnych zasad harmonogramu
Instrukcje: tworzenie agentów korzystających ze specjalnych zasad harmonogramu