Udostępnij za pośrednictwem


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 MinConcurrencyzasad 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