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_HIGHEST
wartość .
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