Udostępnij za pośrednictwem


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 NULLwartość .

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