IExecutionResource — Struktura
Abstrakcja wątku sprzętowego.
Składnia
struct IExecutionResource;
Elementy członkowskie
Metody publiczne
Nazwa/nazwisko | opis |
---|---|
IExecutionResource::CurrentSubscriptionLevel | Zwraca liczbę aktywowanych katalogów głównych procesora wirtualnego i subskrybowanych wątków zewnętrznych aktualnie skojarzonych z bazowym wątkiem sprzętowym reprezentowanym przez ten zasób wykonywania. |
IExecutionResource::GetExecutionResourceId | Zwraca unikatowy identyfikator wątku sprzętowego reprezentowanego przez ten zasób wykonywania. |
IExecutionResource::GetNodeId | Zwraca unikatowy identyfikator węzła procesora, do którego należy ten zasób wykonywania. |
IExecutionResource::Remove | Zwraca ten zasób wykonywania do usługi Resource Manager. |
Uwagi
Zasoby wykonywania mogą być autonomiczne lub skojarzone z katalogami głównych procesorów wirtualnych. Autonomiczny zasób wykonywania jest tworzony, gdy wątek w aplikacji tworzy subskrypcję wątku. Metody ISchedulerProxy::SubscribeThread i ISchedulerProxy::RequestInitialVirtualProcessors tworzą subskrypcje wątków i zwracają IExecutionResource
interfejs reprezentujący subskrypcję. Tworzenie subskrypcji wątków to sposób informowania usługi Resource Manager o tym, że dany wątek będzie uczestniczyć w pracy w kolejce do harmonogramu wraz z przypisaniem menedżera zasobów procesora wirtualnego do harmonogramu. Usługa Resource Manager używa informacji, aby uniknąć nadmiernego subskrybowania wątków sprzętowych, w których może.
Hierarchia dziedziczenia
IExecutionResource
Wymagania
Nagłówek: concrtrm.h
Przestrzeń nazw: współbieżność
IExecutionResource::CurrentSubscriptionLevel — Metoda
Zwraca liczbę aktywowanych katalogów głównych procesora wirtualnego i subskrybowanych wątków zewnętrznych aktualnie skojarzonych z bazowym wątkiem sprzętowym reprezentowanym przez ten zasób wykonywania.
virtual unsigned int CurrentSubscriptionLevel() const = 0;
Wartość zwracana
Bieżący poziom subskrypcji.
Uwagi
Poziom subskrypcji informuje, ile uruchomionych wątków jest skojarzonych z wątkiem sprzętowym. Obejmuje to tylko wątki, o których usługa Resource Manager jest świadoma w postaci subskrybowanych wątków, oraz katalogów głównych procesorów wirtualnych, które aktywnie wykonują serwery proxy wątków.
Wywołanie metody ISchedulerProxy::SubscribeCurrentThread lub metody ISchedulerProxy::RequestInitialVirtualProcessors z parametrem doSubscribeCurrentThread
ustawionym na wartość true
zwiększa poziom subskrypcji wątku sprzętowego o jeden. Zwracają IExecutionResource
również interfejs reprezentujący subskrypcję. Odpowiednie wywołanie elementu IExecutionResource::Remove dekrementuje poziom subskrypcji wątku sprzętowego o jeden.
Czynność aktywowania katalogu głównego procesora wirtualnego przy użyciu metody IVirtualProcessorRoot::Activate zwiększa poziom subskrypcji wątku sprzętowego o jeden. Metody IVirtualProcessorRoot::D eactivate lub IExecutionResource::Usuń dekrementację poziomu subskrypcji o jeden po wywołaniu na aktywowanym katalogu głównym procesora wirtualnego.
Usługa Resource Manager używa informacji o poziomie subskrypcji jako jednego ze sposobów określania, kiedy przenieść zasoby między harmonogramami.
IExecutionResource::GetExecutionResourceId — Metoda
Zwraca unikatowy identyfikator wątku sprzętowego reprezentowanego przez ten zasób wykonywania.
virtual unsigned int GetExecutionResourceId() const = 0;
Wartość zwracana
Unikatowy identyfikator wątku sprzętowego bazowego tego zasobu wykonywania.
Uwagi
Każdy wątek sprzętu ma przypisany unikatowy identyfikator środowiska uruchomieniowego współbieżności. Jeśli wątek sprzętowy jest skojarzony z wieloma zasobami wykonywania, wszystkie będą miały ten sam identyfikator zasobu wykonywania.
IExecutionResource::GetNodeId — Metoda
Zwraca unikatowy identyfikator węzła procesora, do którego należy ten zasób wykonywania.
virtual unsigned int GetNodeId() const = 0;
Wartość zwracana
Unikatowy identyfikator węzła procesora.
Uwagi
Środowisko uruchomieniowe współbieżności reprezentuje wątki sprzętowe w systemie w grupach węzłów procesora. Węzły są zwykle pochodzące z topologii sprzętu systemu. Na przykład wszystkie procesory określonego gniazda lub określonego węzła NUMA mogą należeć do tego samego węzła procesora. Usługa Resource Manager przypisuje unikatowe identyfikatory do tych węzłów, począwszy od 0
parametru do i w tym nodeCount - 1
, gdzie nodeCount
reprezentuje łączną liczbę węzłów procesora w systemie.
Liczbę węzłów można uzyskać z funkcji GetProcessorNodeCount.
IExecutionResource::Remove — Metoda
Zwraca ten zasób wykonywania do usługi Resource Manager.
virtual void Remove(_Inout_ IScheduler* pScheduler) = 0;
Parametry
pScheduler
Interfejs harmonogramu wysyłający żądanie usunięcia tego zasobu wykonywania.
Uwagi
Użyj tej metody, aby zwrócić zasoby wykonywania autonomicznego, a także zasoby wykonywania skojarzone z katalogami głównych procesorów wirtualnych do usługi Resource Manager.
Jeśli jest to zasób wykonywania autonomicznego otrzymany z jednej z metod ISchedulerProxy::SubscribeCurrentThread lub ISchedulerProxy::RequestInitialVirtualProcessors, wywołanie metody Remove
spowoduje zakończenie subskrypcji wątku utworzonej przez zasób do reprezentowania. Musisz zakończyć wszystkie subskrypcje wątków przed zamknięciem serwera proxy harmonogramu i należy wywołać Remove
z wątku, który utworzył subskrypcję.
Katalogi głównych procesorów wirtualnych można również zwrócić do usługi Resource Manager, wywołując metodę Remove
, ponieważ interfejs IVirtualProcessorRoot
dziedziczy z interfejsu IExecutionResource
. Może być konieczne zwrócenie katalogu głównego procesora wirtualnego w odpowiedzi na wywołanie metody IScheduler::RemoveVirtualProcessors lub po zakończeniu z zastąpionym katalogiem głównym procesora wirtualnego uzyskanym z metody ISchedulerProxy::CreateOversubscriber . W przypadku katalogów głównych procesorów wirtualnych nie ma żadnych ograniczeń dotyczących tego, który wątek może wywołać metodę Remove
.
invalid_argument
parametr jest zgłaszany, jeśli parametr pScheduler
jest ustawiony na NULL
wartość .
invalid_operation
Parametr jest zgłaszany, jeśli parametr pScheduler
różni się od harmonogramu, dla którego utworzono ten zasób wykonywania, lub z zasobem autonomicznego wykonywania, jeśli bieżący wątek różni się od wątku, który utworzył subskrypcję wątku.
Zobacz też
Przestrzeń nazw współbieżności
IVirtualProcessorRoot, struktura