Share via


Estrutura IExecutionResource

Uma abstração para um thread de hardware.

Sintaxe

struct IExecutionResource;

Membros

Métodos públicos

Nome Descrição
IExecutionResource::CurrentSubscriptionLevel Retorna o número de raízes de processador virtual e threads externos inscritos ativados atualmente associados ao thread de hardware subjacente que esse recurso de execução representa.
IExecutionResource::GetExecutionResourceId Retorna um identificador exclusivo para o thread de hardware que esse recurso de execução representa.
IExecutionResource::GetNodeId Retorna um identificador exclusivo para o nó do processador ao qual esse recurso de execução pertence.
IExecutionResource::Remove Retorna esse recurso de execução para o Resource Manager.

Comentários

Os recursos de execução podem ser autônomos ou associados às raízes de processador virtual. Um recurso de execução autônomo é criado quando um thread em seu aplicativo cria uma assinatura de thread. Os métodos ISchedulerProxy::SubscribeThread e ISchedulerProxy::RequestInitialVirtualProcessors criam assinaturas de thread e retornam uma interface IExecutionResource que representa a assinatura. Criar uma assinatura de thread é uma maneira de informar ao Resource Manager que um determinado thread participará do trabalho na fila de um agendador, juntamente com as raízes de processador virtual que o Resource Manager atribuir ao agendador. O Resource Manager usa as informações para evitar sobrescrever threads de hardware onde for possível.

Hierarquia de herança

IExecutionResource

Requisitos

Cabeçalho: concrtrm.h

Namespace: concurrency

IExecutionResource::CurrentSubscriptionLevel Method

Retorna o número de raízes de processador virtual e threads externos inscritos ativados atualmente associados ao thread de hardware subjacente que esse recurso de execução representa.

virtual unsigned int CurrentSubscriptionLevel() const = 0;

Valor de Devolução

O nível de assinatura atual.

Comentários

O nível de assinatura informa quantos threads em execução estão associados ao thread de hardware. Isso inclui apenas threads de que o Resource Manager está ciente na forma de threads inscritos, e raízes de processador virtual que estão executando ativamente proxies de thread.

Chamar o método ISchedulerProxy::SubscribeCurrentThread ou o método ISchedulerProxy::RequestInitialVirtualProcessors com o parâmetro doSubscribeCurrentThread definido para o valor true incrementa o nível de assinatura de um thread de hardware por um. Eles também retornam uma interface IExecutionResource que representa a assinatura. Uma chamada correspondente ao IExecutionResource::Remove diminui o nível de assinatura do thread de hardware por um.

O ato de ativar uma raiz de processador virtual usando o método IVirtualProcessorRoot::Activate incrementa o nível de assinatura de um thread de hardware por um. Os métodos IVirtualProcessorRoot::Deactivate ou IExecutionResource::Remove diminuem o nível de assinatura por um quando invocados em uma raiz de processador virtual.

O Resource Manager usa informações de nível de assinatura como uma das maneiras de determinar quando mover recursos entre agendadores.

Método IExecutionResource::GetExecutionResourceId

Retorna um identificador exclusivo para o thread de hardware que esse recurso de execução representa.

virtual unsigned int GetExecutionResourceId() const = 0;

Valor de Devolução

Um identificador exclusivo para o thread de hardware subjacente a esse recurso de execução.

Comentários

Cada thread de hardware recebe um identificador exclusivo pelo Runtime de Simultaneidade. Se vários recursos de execução forem threads de hardware associado, todos eles terão o mesmo identificador de recurso de execução.

Método IExecutionResource::GetNodeId

Retorna um identificador exclusivo para o nó do processador ao qual esse recurso de execução pertence.

virtual unsigned int GetNodeId() const = 0;

Valor de Devolução

Um identificador exclusivo para um nó de processador.

Comentários

O Runtime de Simultaneidade representa threads de hardware no sistema em grupos de nós de processador. Os nós geralmente são derivados da topologia de hardware do sistema. Por exemplo, todos os processadores em um soquete específico ou em um nó NUMA específico podem pertencer ao mesmo nó do processador. O Resource Manager atribui identificadores exclusivos a esses nós, começando com 0 até e incluindonodeCount - 1, em que nodeCount representa o número total de nós de processador no sistema.

A contagem de nós pode ser obtida da função GetProcessorNodeCount.

Método IExecutionResource::Remove

Retorna esse recurso de execução para o Resource Manager.

virtual void Remove(_Inout_ IScheduler* pScheduler) = 0;

Parâmetros

pScheduler
Uma interface para o agendador que está fazendo a solicitação para remover esse recurso de execução.

Comentários

Use esse método para retornar recursos de execução autônomos, bem como recursos de execução associados às raízes de processador virtual para o Resource Manager.

Se esse for um recurso de execução autônomo que você recebeu de qualquer um dos métodos ISchedulerProxy::SubscribeCurrentThread ou ISchedulerProxy::RequestInitialVirtualProcessors, chamar o método Remove encerrará a assinatura de thread que o recurso foi criado para representar. Você deve encerrar todas as assinaturas de thread antes de desligar um proxy de agendador, e deve chamar Remove do thread que criou a assinatura.

As raízes de processador virtual também podem ser retornadas ao Resource Manager invocando o método Remove, pois a interface IVirtualProcessorRoot herda da interface IExecutionResource. Pode ser necessário retornar uma raiz de processador virtual em resposta a uma chamada para o método IScheduler::RemoveVirtualProcessors ou quando você terminar com uma raiz de processador virtual com excesso de assinatura obtida do método ISchedulerProxy::CreateOversubscriber. No caso de raízes de processador virtual, não há restrições sobre qual thread pode invocar o método Remove.

invalid_argument será gerado se o parâmetro pScheduler for definido como NULL.

invalid_operation será gerado se o parâmetro pScheduler for diferente do agendador para o qual esse recurso de execução foi criado ou, com um recurso de execução autônomo, se o thread atual for diferente do thread que criou a assinatura de thread.

Confira também

Namespace de simultaneidade
Estrutura IVirtualProcessorRoot