ISchedulerProxy — Struktura
Interfejs, za pomocą którego harmonogramy komunikują się z usługą Resource Manager środowiska uruchomieniowego współbieżności w celu negocjowania alokacji zasobów.
Składnia
struct ISchedulerProxy;
Elementy członkowskie
Metody publiczne
Nazwa/nazwisko | opis |
---|---|
ISchedulerProxy::BindContext | Kojarzy kontekst wykonywania z serwerem proxy wątku, jeśli nie jest jeszcze skojarzony z nim. |
ISchedulerProxy::CreateOversubscriber | Tworzy nowy katalog główny procesora wirtualnego w wątku sprzętowym skojarzonym z istniejącym zasobem wykonywania. |
ISchedulerProxy::RequestInitialVirtualProcessors | Żąda początkowej alokacji katalogów głównych procesora wirtualnego. Każdy katalog główny procesora wirtualnego reprezentuje możliwość wykonywania jednego wątku, który może wykonywać pracę dla harmonogramu. |
ISchedulerProxy::Shutdown | Powiadamia menedżera zasobów, że harmonogram jest zamykany. Spowoduje to natychmiastowe odzyskanie wszystkich zasobów przyznanych harmonogramowi przez usługę Resource Manager. |
ISchedulerProxy::SubscribeCurrentThread | Rejestruje bieżący wątek w usłudze Resource Manager, kojarząc go z tym harmonogramem. |
ISchedulerProxy::UnbindContext | Usuwa skojarzenie serwera proxy wątku z kontekstu wykonywania określonego pContext przez parametr i zwraca go do bezpłatnej puli fabryki serwerów proxy wątku. Ta metoda może być wywoływana tylko w kontekście wykonywania, który został powiązany za pośrednictwem metody ISchedulerProxy::BindContext i nie został jeszcze uruchomiony za pośrednictwem pContext parametru wywołania metody IThreadProxy::SwitchTo . |
Uwagi
Usługa Resource Manager przekazuje ISchedulerProxy
interfejs każdemu harmonogramowi, który rejestruje się w nim przy użyciu metody IResourceManager::RegisterScheduler .
Hierarchia dziedziczenia
ISchedulerProxy
Wymagania
Nagłówek: concrtrm.h
Przestrzeń nazw: współbieżność
ISchedulerProxy::BindContext — Metoda
Kojarzy kontekst wykonywania z serwerem proxy wątku, jeśli nie jest jeszcze skojarzony z nim.
virtual void BindContext(_Inout_ IExecutionContext* pContext) = 0;
Parametry
pContext
Interfejs kontekstu wykonywania do skojarzenia z serwerem proxy wątku.
Uwagi
Zwykle metoda IThreadProxy::SwitchTo wiąże serwer proxy wątku z kontekstem wykonywania na żądanie. Istnieją jednak okoliczności, w których konieczne jest powiązanie kontekstu z wyprzedzeniem, aby upewnić się, że SwitchTo
metoda przełącza się do już powiązanego kontekstu. Jest to przypadek w kontekście planowania usługi UMS, ponieważ nie może wywoływać metod przydzielania pamięci, a powiązanie serwera proxy wątku może obejmować alokację pamięci, jeśli serwer proxy wątku nie jest łatwo dostępny w bezpłatnej puli fabryki serwera proxy wątków.
invalid_argument
parametr jest zgłaszany, jeśli parametr pContext
ma wartość NULL
.
ISchedulerProxy::CreateOversubscriber — Metoda
Tworzy nowy katalog główny procesora wirtualnego w wątku sprzętowym skojarzonym z istniejącym zasobem wykonywania.
virtual IVirtualProcessorRoot* CreateOversubscriber(_Inout_ IExecutionResource* pExecutionResource) = 0;
Parametry
pExecutionResource
Interfejs IExecutionResource
reprezentujący wątek sprzętowy, który ma zostać zastąpiony.
Wartość zwracana
Interfejs IVirtualProcessorRoot
.
Uwagi
Użyj tej metody, gdy harmonogram chce zastąpić określony wątek sprzętowy przez ograniczony czas. Po zakończeniu pracy z katalogiem głównym procesora wirtualnego należy zwrócić go do menedżera zasobów, wywołując metodę Remove w interfejsie IVirtualProcessorRoot
.
Możesz nawet zastąpić istniejący katalog główny procesora wirtualnego, ponieważ IVirtualProcessorRoot
interfejs dziedziczy z interfejsu IExecutionResource
.
ISchedulerProxy::RequestInitialVirtualProcessors — Metoda
Żąda początkowej alokacji katalogów głównych procesora wirtualnego. Każdy katalog główny procesora wirtualnego reprezentuje możliwość wykonywania jednego wątku, który może wykonywać pracę dla harmonogramu.
virtual IExecutionResource* RequestInitialVirtualProcessors(bool doSubscribeCurrentThread) = 0;
Parametry
doSubscribeCurrentThread
Czy zasubskrybować bieżący wątek i uwzględnić go podczas alokacji zasobów.
Wartość zwracana
Interfejs IExecutionResource
dla bieżącego wątku, jeśli parametr doSubscribeCurrentThread
ma wartość true
. Jeśli wartość to false
, metoda zwraca wartość NULL.
Uwagi
Zanim harmonogram wykona każdą pracę, należy użyć tej metody, aby zażądać katalogów głównych procesora wirtualnego z usługi Resource Manager. Usługa Resource Manager będzie uzyskiwać dostęp do zasad harmonogramu przy użyciu interfejsu IScheduler::GetPolicy i używać wartości kluczy MinConcurrency
zasad oraz MaxConcurrency
TargetOversubscriptionFactor
określić, ile wątków sprzętowych do przypisania do harmonogramu początkowo oraz liczbę katalogów głównych procesorów wirtualnych do utworzenia dla każdego wątku sprzętowego. Aby uzyskać więcej informacji na temat sposobu, w jaki zasady harmonogramu są używane do określania początkowej alokacji harmonogramu, zobacz PolicyElementKey.
Usługa Resource Manager udziela zasobów harmonogramowi, wywołując metodę IScheduler::AddVirtualProcessors z listą katalogów głównych procesorów wirtualnych. Metoda jest wywoływana jako wywołanie zwrotne do harmonogramu przed zwróceniem tej metody.
Jeśli harmonogram zażądał subskrypcji dla bieżącego wątku, ustawiając parametr doSubscribeCurrentThread
na true
, metoda zwraca IExecutionResource
interfejs. Subskrypcja musi zostać zakończona w późniejszym momencie przy użyciu metody IExecutionResource::Remove .
Podczas określania, które wątki sprzętowe są wybrane, usługa Resource Manager podejmie próbę optymalizacji pod kątem koligacji węzła procesora. Jeśli zażądano subskrypcji dla bieżącego wątku, oznacza to, że bieżący wątek zamierza uczestniczyć w pracy przypisanej do tego harmonogramu. W takim przypadku przydzielone rdzenie procesorów wirtualnych znajdują się w węźle procesora, w przypadku gdy jest to możliwe, bieżący wątek jest wykonywany.
Czynność subskrybowania wątku zwiększa poziom subskrypcji bazowego wątku sprzętowego o jeden. Poziom subskrypcji jest zmniejszany o jeden po zakończeniu subskrypcji. Aby uzyskać więcej informacji na temat poziomów subskrypcji, zobacz IExecutionResource::CurrentSubscriptionLevel.
ISchedulerProxy::Shutdown — Metoda
Powiadamia menedżera zasobów, że harmonogram jest zamykany. Spowoduje to natychmiastowe odzyskanie wszystkich zasobów przyznanych harmonogramowi przez usługę Resource Manager.
virtual void Shutdown() = 0;
Uwagi
Wszystkie IExecutionContext
interfejsy, które harmonogram otrzymał w wyniku zasubskrybowania wątku zewnętrznego przy użyciu metod ISchedulerProxy::RequestInitialVirtualProcessors
lub ISchedulerProxy::SubscribeCurrentThread
muszą zostać zwrócone do usługi Resource Manager przy użyciu polecenia IExecutionResource::Remove
przed zamknięciem harmonogramu.
Jeśli harmonogram miał jakiekolwiek dezaktywowane katalogi głównych procesorów wirtualnych, należy je aktywować przy użyciu katalogu IVirtualProcessorRoot::Activate i mieć serwery proxy wątku wykonywane na nich pozostawić Dispatch
metodę kontekstów wykonywania, które są wysyłane przed wywołaniem Shutdown
na serwerze proxy harmonogramu.
Nie jest konieczne, aby harmonogram indywidualnie zwracał wszystkie katalogi root procesora wirtualnego przydzielone do usługi Resource Manager za pośrednictwem wywołań Remove
metody, ponieważ wszystkie katalogi głównych procesorów wirtualnych zostaną zwrócone do usługi Resource Manager przy zamykaniu.
ISchedulerProxy::SubscribeCurrentThread — Metoda
Rejestruje bieżący wątek w usłudze Resource Manager, kojarząc go z tym harmonogramem.
virtual IExecutionResource* SubscribeCurrentThread() = 0;
Wartość zwracana
Interfacing IExecutionResource
reprezentujący bieżący wątek w środowisku uruchomieniowym.
Uwagi
Użyj tej metody, jeśli chcesz, aby usługa Resource Manager uwzględniała bieżący wątek podczas przydzielania zasobów do harmonogramu i innych harmonogramów. Jest to szczególnie przydatne, gdy wątek planuje uczestniczyć w pracy w kolejce do harmonogramu, wraz z elementami głównych procesora wirtualnego, który harmonogram otrzymuje z usługi Resource Manager. Usługa Resource Manager używa informacji, aby zapobiec niepotrzebnemu zastępowaniu wątków sprzętowych w systemie.
Zasób wykonywania otrzymany za pośrednictwem tej metody powinien zostać zwrócony do usługi Resource Manager przy użyciu metody IExecutionResource::Remove . Wątek wywołujący metodę Remove
musi być tym samym wątkiem, który wcześniej nazwał metodę SubscribeCurrentThread
.
Czynność subskrybowania wątku zwiększa poziom subskrypcji bazowego wątku sprzętowego o jeden. Poziom subskrypcji jest zmniejszany o jeden po zakończeniu subskrypcji. Aby uzyskać więcej informacji na temat poziomów subskrypcji, zobacz IExecutionResource::CurrentSubscriptionLevel.
ISchedulerProxy::UnbindContext — Metoda
Usuwa skojarzenie serwera proxy wątku z kontekstu wykonywania określonego pContext
przez parametr i zwraca go do bezpłatnej puli fabryki serwerów proxy wątku. Ta metoda może być wywoływana tylko w kontekście wykonywania, który został powiązany za pośrednictwem metody ISchedulerProxy::BindContext i nie został jeszcze uruchomiony za pośrednictwem pContext
parametru wywołania metody IThreadProxy::SwitchTo .
virtual void UnbindContext(_Inout_ IExecutionContext* pContext) = 0;
Parametry
pContext
Kontekst wykonywania, aby usunąć skojarzenie z serwera proxy wątku.
Zobacz też
Przestrzeń nazw współbieżności
IScheduler, struktura
IThreadProxy, struktura
IVirtualProcessorRoot, struktura
IResourceManager, struktura