Udostępnij za pośrednictwem


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;

Członkowie

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