Zasady harmonogramu
W tym dokumencie opisano rolę polityk harmonogram w czasie wykonywania współbieżności.A zasad harmonogram steruje strategii, używany w harmonogramie podczas zarządzania zadaniami.Rozważmy na przykład aplikacja, która wymaga niektórych zadań do wykonania w THREAD_PRIORITY_NORMAL i innych zadań do wykonania w THREAD_PRIORITY_HIGHEST. Można utworzyć dwa wystąpienia harmonogramu: jedną, która określa ContextPriority zasady są THREAD_PRIORITY_NORMAL oraz inne, które określa się takie same zasady THREAD_PRIORITY_HIGHEST.
Za pomocą harmonogramu zasad, można podzielić przetwarzania dostępnych zasobów i przypisać każdy harmonogram ustalony zbiór zasobów.Rozważmy na przykład równoległych algorytmu, który nie jest skalowany poza cztery procesory.Można utworzyć zasadę harmonogram, który ogranicza jego zadań jednocześnie używać nie więcej niż cztery procesory.
Porada |
---|
Współbieżność środowiska wykonawczego zawiera harmonogram domyślny.W związku z tym nie musisz utworzyć w aplikacji.Ponieważ Harmonogram zadań ułatwia dostosowanie wydajności aplikacji, firma Microsoft zaleca uruchamiania z Biblioteka równoległych wzorców (PLL) lub Biblioteka agentów asynchronicznych Jeśli jesteś nowym użytkownikiem w czasie wykonywania współbieżności. |
Użycie concurrency::CurrentScheduler::Create, concurrency::Scheduler::Create, lub concurrency::Scheduler::SetDefaultSchedulerPolicy metoda tworzenia wystąpienia harmonogramu, podać concurrency::SchedulerPolicy obiekt, który zawiera zbiór par klucz wartość, które określają zachowanie harmonogramu.SchedulerPolicy Konstruktor ma zmienną liczbę argumentów.Pierwszy argument jest liczba elementów zasad, które masz zamiar określić.Pozostałe argumenty są par klucz wartość dla każdego elementu zasad.Poniższy przykład tworzy SchedulerPolicy obiekt, który określa trzy elementy zasad.Środowisko wykonawcze 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
);
Concurrency::PolicyElementKey definiuje wyliczenie kluczy zasad, które są skojarzone z harmonogramu zadań.W poniższej tabeli opisano zasady kluczy i domyślną wartość, która używa środowisko wykonawcze dla każdego z nich.
Klucz zasad |
Opis |
Wartość domyślna |
---|---|---|
SchedulerKind |
A concurrency::SchedulerType wartość, która określa typ wątków używanych do planowania zadań. |
ThreadScheduler(użyj normalnych wątków).Jest to jedyne prawidłowe wartości dla tego klucza. |
MaxConcurrency |
unsigned int Wartość, która określa maksymalną liczbę zasobów współbieżności, które używa harmonogramu. |
|
MinConcurrency |
unsigned int Wartość, która określa minimalną liczbę zasobów współbieżności, które używa harmonogramu. |
1 |
TargetOversubscriptionFactor |
unsigned int Wartość, która określa, jak wiele wątków przydzielić do każdego zasobu przetwarzania. |
1 |
LocalContextCacheSize |
unsigned int Wartość, która określa maksymalną liczbę kontekstów, które mogą być buforowane w lokalnej kolejce każdego procesora wirtualnego. |
8 |
ContextStackSize |
unsigned int Wartość, która określa rozmiar stosu, w kilobajtach, aby zarezerwować dla każdego kontekstu. |
0(Użyj domyślnego rozmiaru stosu) |
ContextPriority |
int Wartość, która określa priorytet wątku każdego kontekstu.To może być dowolną wartością, który może zostać przekazany do wykonanie funkcji SetThreadPriority lub INHERIT_THREAD_PRIORITY. |
THREAD_PRIORITY_NORMAL |
SchedulingProtocol |
A concurrency::SchedulingProtocolType wartość, która określa algorytm planowania ma być używany. |
EnhanceScheduleGroupLocality |
DynamicProgressFeedback |
A concurrency::DynamicProgressFeedbackType wartość, która określa, czy do zrównoważenia zasobów według informacji o postępie opartych na statystyki. Uwaga ta zasada nie jest ustawiona ProgressFeedbackDisabled ponieważ jest zarezerwowana do użytku w czasie wykonywania. |
ProgressFeedbackEnabled |
Każdy harmonogram używa własnej polityki, gdy planuje ona zadania.Zasady, które są skojarzone z jednym harmonogram nie wpływają na zachowanie innych harmonogramu.Ponadto, nie można zmienić zasady harmonogram po utworzeniu Scheduler obiektu.
Ważne |
---|
Tylko harmonogram zasady umożliwiają sterowanie atrybutów dla wątków, które tworzy środowisko czasu wykonania.Nie należy zmieniać koligacji wątku lub priorytetu wątków, które są tworzone w czasie wykonywania, ponieważ, które mogą spowodować niezdefiniowane zachowanie. |
Środowisko wykonawcze tworzy harmonogram domyślny dla Ciebie, jeśli nie jawnie utworzyć jeden.Jeśli chcesz użyć domyślnego harmonogramu w aplikacji, ale chcesz określić zasady dla tego harmonogramu do używania, wywołanie concurrency::Scheduler::SetDefaultSchedulerPolicy metoda zanim zaplanowane równoległą pracę.Jeśli nie zostanie wywołana Scheduler::SetDefaultSchedulerPolicy metodę, do zastosowań runtime zasady domyślne wartości z tabeli.
Użycie concurrency::CurrentScheduler::GetPolicy i concurrency::Scheduler::GetPolicy metod, aby pobrać kopię zasad harmonogramu.Wartości zasad, które otrzymujesz z tych metod mogą się różnić od wartości zasad, które można określić podczas tworzenia harmonogramu.
Przykład
Aby zbadać przykładów, które używają zasad szczególnych harmonogram w celu sterowania zachowaniem harmonogramu, zobacz Porady: określanie specjalnych zasad harmonogramu i Porady: tworzenie agentów korzystających ze specjalnych zasad harmonogramu.
Zobacz też
Zadania
Porady: określanie specjalnych zasad harmonogramu
Porady: tworzenie agentów korzystających ze specjalnych zasad harmonogramu