Struktura IScheduler
Interfejs abstrakcji harmonogramu pracy. Menedżer zasobów środowiska uruchomieniowego współbieżności używa tego interfejsu do komunikowania się z harmonogramami pracy.
Składnia
struct IScheduler;
Elementy członkowskie
Metody publiczne
Nazwa/nazwisko | opis |
---|---|
IScheduler::AddVirtualProcessors | Udostępnia harmonogram z zestawem katalogów głównych procesora wirtualnego do użycia. Każdy IVirtualProcessorRoot interfejs reprezentuje prawo do wykonania pojedynczego wątku, który może wykonywać pracę w imieniu harmonogramu. |
IScheduler::GetId | Zwraca unikatowy identyfikator harmonogramu. |
IScheduler::GetPolicy | Zwraca kopię zasad harmonogramu. Aby uzyskać więcej informacji na temat zasad harmonogramu, zobacz SchedulerPolicy. |
IScheduler::NotifyResourcesExternallyBusy | Powiadamia ten harmonogram, że wątki sprzętowe reprezentowane przez zestaw elementów głównych procesora wirtualnego w tablicy ppVirtualProcessorRoots są teraz używane przez inne harmonogramy. |
IScheduler::NotifyResourcesExternallyIdle | Powiadamia ten harmonogram, że wątki sprzętowe reprezentowane przez zestaw katalogów głównych procesorów wirtualnych w tablicy ppVirtualProcessorRoots nie są używane przez inne harmonogramy. |
IScheduler::RemoveVirtualProcessors | Inicjuje usuwanie katalogów głównych procesorów wirtualnych, które zostały wcześniej przydzielone do tego harmonogramu. |
IScheduler::Statistics | Zawiera informacje związane z szybkością przybycia i ukończenia zadania oraz zmianą długości kolejki dla harmonogramu. |
Uwagi
Jeśli implementujesz niestandardowy harmonogram, który komunikuje się z usługą Resource Manager, należy podać implementację interfejsu IScheduler
. Ten interfejs to jeden koniec dwukierunkowego kanału komunikacji między harmonogramem a usługą Resource Manager. Drugi koniec jest reprezentowany przez IResourceManager
interfejsy i ISchedulerProxy
, które są implementowane przez usługę Resource Manager.
Hierarchia dziedziczenia
IScheduler
Wymagania
Nagłówek: concrtrm.h
Przestrzeń nazw: współbieżność
IScheduler::AddVirtualProcessors — Metoda
Udostępnia harmonogram z zestawem katalogów głównych procesora wirtualnego do użycia. Każdy IVirtualProcessorRoot
interfejs reprezentuje prawo do wykonania pojedynczego wątku, który może wykonywać pracę w imieniu harmonogramu.
virtual void AddVirtualProcessors(
_In_reads_(count) IVirtualProcessorRoot** ppVirtualProcessorRoots,
unsigned int count) = 0;
Parametry
ppVirtualProcessorRoots
Tablica interfejsów IVirtualProcessorRoot
reprezentujących elementy root procesora wirtualnego dodawane do harmonogramu.
count
Liczba interfejsów IVirtualProcessorRoot
w tablicy.
Uwagi
Usługa Resource Manager wywołuje metodę AddVirtualProcessor
w celu udzielenia początkowego zestawu katalogów głównych procesora wirtualnego do harmonogramu. Może również wywołać metodę dodawania katalogów głównych procesorów wirtualnych do harmonogramu podczas ponownego równoważenia zasobów między harmonogramami.
IScheduler::GetId — Metoda
Zwraca unikatowy identyfikator harmonogramu.
virtual unsigned int GetId() const = 0;
Wartość zwracana
Unikatowy identyfikator liczb całkowitych.
Uwagi
Należy użyć funkcji GetSchedulerId , aby uzyskać unikatowy identyfikator obiektu, który implementuje IScheduler
interfejs, przed użyciem interfejsu jako parametru do metod dostarczonych przez usługę Resource Manager. Oczekuje się, że po wywołaniu funkcji zostanie zwrócony ten sam identyfikator GetId
.
Identyfikator uzyskany z innego źródła może spowodować niezdefiniowane zachowanie.
IScheduler::GetPolicy — Metoda
Zwraca kopię zasad harmonogramu. Aby uzyskać więcej informacji na temat zasad harmonogramu, zobacz SchedulerPolicy.
virtual SchedulerPolicy GetPolicy() const = 0;
Wartość zwracana
Kopia zasad harmonogramu.
IScheduler::NotifyResourcesExternallyBusy — Metoda
Powiadamia ten harmonogram, że wątki sprzętowe reprezentowane przez zestaw elementów głównych procesora wirtualnego w tablicy ppVirtualProcessorRoots
są teraz używane przez inne harmonogramy.
virtual void NotifyResourcesExternallyBusy(
_In_reads_(count) IVirtualProcessorRoot** ppVirtualProcessorRoots,
unsigned int count) = 0;
Parametry
ppVirtualProcessorRoots
Tablica interfejsów IVirtualProcessorRoot
skojarzonych z wątkami sprzętowymi, na których inne harmonogramy stały się zajęte.
count
Liczba interfejsów IVirtualProcessorRoot
w tablicy.
Uwagi
Istnieje możliwość przypisania określonego wątku sprzętowego do wielu harmonogramów jednocześnie. Jednym z powodów może być to, że w systemie nie ma wystarczającej liczby wątków sprzętowych, aby spełnić minimalną współbieżność dla wszystkich harmonogramów bez udostępniania zasobów. Inną możliwością jest to, że zasoby są tymczasowo przypisywane do innych harmonogramów, gdy harmonogram będący właścicielem nie korzysta z nich, za pomocą wszystkich katalogów głównych procesora wirtualnego w tym wątku sprzętowym jest dezaktywowany.
Poziom subskrypcji wątku sprzętowego jest oznaczony liczbą subskrybowanych wątków i aktywowanymi katalogami głównych procesorów wirtualnych skojarzonymi z tym wątkiem sprzętowym. Z punktu widzenia określonego harmonogramu zewnętrzny poziom subskrypcji wątku sprzętowego jest częścią subskrypcji współtworzenia innych harmonogramów. Powiadomienia o tym, że zasoby są zewnętrznie zajęte, są wysyłane do harmonogramu, gdy poziom subskrypcji zewnętrznej wątku sprzętowego przenosi się z zera do obszaru pozytywnego.
Powiadomienia za pośrednictwem tej metody są wysyłane tylko do harmonogramów, które mają zasady, w których wartość MinConcurrency
klucza zasad jest równa wartości MaxConcurrency
klucza zasad. Aby uzyskać więcej informacji na temat zasad harmonogramu, zobacz SchedulerPolicy.
Harmonogram, który kwalifikuje się do powiadomień, pobiera zestaw początkowych powiadomień podczas jego tworzenia, informując o tym, czy zasoby, które właśnie przypisano, są zajęte zewnętrznie lub bezczynne.
IScheduler::NotifyResourcesExternallyIdle — Metoda
Powiadamia ten harmonogram, że wątki sprzętowe reprezentowane przez zestaw katalogów głównych procesorów wirtualnych w tablicy ppVirtualProcessorRoots
nie są używane przez inne harmonogramy.
virtual void NotifyResourcesExternallyIdle(
_In_reads_(count) IVirtualProcessorRoot** ppVirtualProcessorRoots,
unsigned int count) = 0;
Parametry
ppVirtualProcessorRoots
Tablica interfejsów IVirtualProcessorRoot
skojarzonych z wątkami sprzętowymi, na których inne harmonogramy stały się bezczynne.
count
Liczba interfejsów IVirtualProcessorRoot
w tablicy.
Uwagi
Istnieje możliwość przypisania określonego wątku sprzętowego do wielu harmonogramów jednocześnie. Jednym z powodów może być to, że w systemie nie ma wystarczającej liczby wątków sprzętowych, aby spełnić minimalną współbieżność dla wszystkich harmonogramów bez udostępniania zasobów. Inną możliwością jest to, że zasoby są tymczasowo przypisywane do innych harmonogramów, gdy harmonogram będący właścicielem nie korzysta z nich, za pomocą wszystkich katalogów głównych procesora wirtualnego w tym wątku sprzętowym jest dezaktywowany.
Poziom subskrypcji wątku sprzętowego jest oznaczony liczbą subskrybowanych wątków i aktywowanymi katalogami głównych procesorów wirtualnych skojarzonymi z tym wątkiem sprzętowym. Z punktu widzenia określonego harmonogramu zewnętrzny poziom subskrypcji wątku sprzętowego jest częścią subskrypcji współtworzenia innych harmonogramów. Powiadomienia o tym, że zasoby są zewnętrznie zajęte, są wysyłane do harmonogramu, gdy poziom subskrypcji zewnętrznej wątku sprzętowego spadnie do zera z poprzedniej wartości dodatniej.
Powiadomienia za pośrednictwem tej metody są wysyłane tylko do harmonogramów, które mają zasady, w których wartość MinConcurrency
klucza zasad jest równa wartości MaxConcurrency
klucza zasad. Aby uzyskać więcej informacji na temat zasad harmonogramu, zobacz SchedulerPolicy.
Harmonogram, który kwalifikuje się do powiadomień, pobiera zestaw początkowych powiadomień podczas jego tworzenia, informując o tym, czy zasoby, które właśnie przypisano, są zajęte zewnętrznie lub bezczynne.
IScheduler::RemoveVirtualProcessors — Metoda
Inicjuje usuwanie katalogów głównych procesorów wirtualnych, które zostały wcześniej przydzielone do tego harmonogramu.
virtual void RemoveVirtualProcessors(
_In_reads_(count) IVirtualProcessorRoot** ppVirtualProcessorRoots,
unsigned int count) = 0;
Parametry
ppVirtualProcessorRoots
Tablica interfejsów IVirtualProcessorRoot
reprezentujących elementy root procesora wirtualnego, które mają zostać usunięte.
count
Liczba interfejsów IVirtualProcessorRoot
w tablicy.
Uwagi
Usługa Resource Manager wywołuje metodę RemoveVirtualProcessors
w celu odzyskania zestawu katalogów głównych procesora wirtualnego z harmonogramu. Harmonogram powinien wywołać metodę Remove dla każdego interfejsu po zakończeniu pracy z katalogami głównych procesora wirtualnego. Nie używaj interfejsu IVirtualProcessorRoot
po wywołaniu Remove
metody na niej.
Parametr ppVirtualProcessorRoots
wskazuje tablicę interfejsów. Wśród zestawu katalogów głównych procesorów wirtualnych, które mają zostać usunięte, korzenie nigdy nie zostały aktywowane, można zwrócić natychmiast przy użyciu Remove
metody . Korzenie, które zostały aktywowane i wykonują pracę lub zostały zdezaktywowane i oczekują na przybycie pracy, powinny zostać zwrócone asynchronicznie. Harmonogram musi podjąć każdą próbę usunięcia katalogu głównego procesora wirtualnego tak szybko, jak to możliwe. Opóźnienie usuwania katalogów głównych procesorów wirtualnych może spowodować niezamierzone zastąpienie w harmonogramie.
IScheduler::Statistics — Metoda
Zawiera informacje związane z szybkością przybycia i ukończenia zadania oraz zmianą długości kolejki dla harmonogramu.
virtual void Statistics(
_Out_ unsigned int* pTaskCompletionRate,
_Out_ unsigned int* pTaskArrivalRate,
_Out_ unsigned int* pNumberOfTasksEnqueued) = 0;
Parametry
pTaskCompletionRate
Liczba zadań, które zostały wykonane przez harmonogram od ostatniego wywołania tej metody.
pTaskArrivalRate
Liczba zadań, które dotarły do harmonogramu od ostatniego wywołania tej metody.
pNumberOfTasksEnqueued
Łączna liczba zadań we wszystkich kolejkach harmonogramu.
Uwagi
Ta metoda jest wywoływana przez usługę Resource Manager w celu zebrania statystyk dla harmonogramu. Zebrane tutaj statystyki będą używane do kierowania dynamicznymi algorytmami opinii w celu określenia, kiedy należy przypisać więcej zasobów do harmonogramu i kiedy zabrać zasoby. Wartości dostarczone przez harmonogram mogą być optymistyczne i niekoniecznie muszą odzwierciedlać bieżącą liczbę dokładnie.
Należy zaimplementować tę metodę, jeśli chcesz, aby usługa Resource Manager korzystała z opinii na temat takich elementów, jak przybycie zadania, aby określić sposób równoważenia zasobu między harmonogramem a innymi harmonogramami zarejestrowanymi w usłudze Resource Manager. Jeśli nie chcesz zbierać statystyk, możesz ustawić klucz DynamicProgressFeedback
zasad na wartość DynamicProgressFeedbackDisabled
w zasadach harmonogramu, a usługa Resource Manager nie wywoła tej metody w harmonogramie.
W przypadku braku informacji statystycznych usługa Resource Manager będzie używać poziomów subskrypcji wątków sprzętowych do podejmowania decyzji dotyczących alokacji zasobów i migracji. Aby uzyskać więcej informacji na temat poziomów subskrypcji, zobacz IExecutionResource::CurrentSubscriptionLevel.
Zobacz też
Przestrzeń nazw współbieżności
PolicyElementKey
SchedulerPolicy, klasa
IExecutionContext, struktura
IThreadProxy, struktura
IVirtualProcessorRoot, struktura
IResourceManager, struktura