Partilhar via


IExecutionResource Estrutura

Uma abstração para um thread de hardware.

Sintaxe

struct IExecutionResource;

Membros

Métodos Públicos

Nome Description
IExecutionResource::CurrentSubscriptionLevel Devolve o número de raízes de processadores virtuais ativadas e threads externos subscritos atualmente associados ao thread de hardware subjacente que este recurso de execução representa.
IExecutionResource::GetExecutionResourceId Devolve um identificador único para a thread de hardware que este recurso de execução representa.
IExecutionResource::GetNodeId Devolve um identificador único para o nó do processador a que pertence este recurso de execução.
IExecutionResource::Remover Devolve este recurso de execução ao Gestor de Recursos.

Observações

Os recursos de execução podem ser autónomos ou associados a raízes de processadores virtuais. Um recurso de execução autónomo é criado quando um thread na sua aplicação cria uma subscrição de thread. Os métodos ISchedulerProxy::SubscribeThread e ISchedulerProxy::RequestInitialVirtualProcessors criam subscrições de thread e retornam uma IExecutionResource interface que representa a subscrição. Criar uma subscrição de thread é uma forma de informar o Resource Manager de que um determinado thread participará no trabalho enfileirado para um scheduler, juntamente com as raízes do processador virtual que o Resource Manager atribui ao scheduler. O Gestor de Recursos utiliza a informação para evitar a sobrecarga de threads de hardware onde possível.

Hierarquia de herança

IExecutionResource

Requerimentos

Cabeçalho: concrtrm.h

Namespace: simultaneidade

Método IExecutionResource::CurrentSubscriptionLevel

Devolve o número de raízes de processadores virtuais ativadas e threads externos subscritos atualmente associados ao thread de hardware subjacente que este recurso de execução representa.

virtual unsigned int CurrentSubscriptionLevel() const = 0;

Valor de retorno

O nível atual de subscrição.

Observações

O nível de subscrição indica-lhe quantos threads em execução estão associados ao thread de hardware. Isto inclui apenas threads de que o Gestor de Recursos tem conhecimento sob a forma de threads inscritos e raízes de processadores virtuais que estão a executar 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 subscrição de uma thread de hardware em um. Também retornam uma IExecutionResource interface que representa a subscrição. Uma chamada correspondente ao IExecutionResource::Remove decrementa o nível de subscrição do thread de hardware por um.

O ato de ativar uma raiz virtual de processador usando o método IVirtualProcessorRoot::Activate incrementa o nível de subscrição de uma thread de hardware em um. Os métodos IVirtualProcessorRoot::Deactivate ou IExecutionResource::Remove decrementam o nível de subscrição em uma unidade quando invocados numa raiz de processador virtual ativada.

O Gestor de Recursos utiliza informação ao nível de subscrição como uma das formas de determinar quando mover recursos entre agendadores.

IExecutionResource::Método GetExecutionResourceId

Devolve um identificador único para a thread de hardware que este recurso de execução representa.

virtual unsigned int GetExecutionResourceId() const = 0;

Valor de retorno

Um identificador único para a thread de hardware subjacente a este recurso de execução.

Observações

Cada thread de hardware recebe um identificador único pelo Tempo de Execução de Concorrência. Se vários recursos de execução estiverem associados a threads de hardware, todos terão o mesmo identificador de recurso de execução.

Método IExecutionResource::GetNodeId

Devolve um identificador único para o nó do processador a que pertence este recurso de execução.

virtual unsigned int GetNodeId() const = 0;

Valor de retorno

Um identificador único para um nó de processador.

Observações

O Tempo de Execução de Concorrência representa threads de hardware no sistema em grupos de nós de processador. Os nós são geralmente derivados da topologia de hardware do sistema. Por exemplo, todos os processadores num socket específico ou num nó NUMA específico podem pertencer ao mesmo nó processador. O Gestor de Recursos atribui identificadores únicos a estes nós começando por 0 até e incluindo nodeCount - 1, onde nodeCount representa o número total de nós de processador no sistema.

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

IExecutionResource::Método Remove

Devolve este recurso de execução ao Gestor de Recursos.

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

Parâmetros

pScheduler
Uma interface para o agendador que faz o pedido para remover este recurso de execução.

Observações

Use este método para devolver recursos de execução autónomas, bem como recursos de execução associados às raízes de processadores virtuais ao Gestor de Recursos.

Se este for um recurso de execução autónomo que recebeu de qualquer um dos métodos ISchedulerProxy::SubscribeCurrentThread ou ISchedulerProxy::RequestInitialVirtualProcessors, chamar o método Remove terminará a subscrição de thread que o recurso foi criado para representar. É necessário terminar todas as assinaturas de threads antes de encerrar um proxy de agendador, e deve invocar Remove a partir da thread que criou a assinatura.

As raízes do processador virtual também podem ser devolvidas ao Gestor de Recursos invocando o Remove método, porque a interface IVirtualProcessorRoot herda da IExecutionResource interface. Pode ser necessário devolver uma raiz de processador virtual em resposta a uma chamada ao método IScheduler::RemoveVirtualProcessors , ou quando terminar com uma raiz de processador virtual sobresubscrita que obteve do método ISchedulerProxy::CreateOversubscriber . Para raízes de processadores virtuais, não existem restrições sobre qual thread pode invocar o Remove método.

invalid_argument é lançado se o parâmetro pScheduler for definido como NULL.

invalid_operation é lançado se o parâmetro pScheduler for diferente do scheduler para o qual este recurso de execução foi criado ou, com um recurso de execução autónomo, se o thread atual for diferente daquele que criou a subscrição da thread.

Consulte também

concorrência Namespace
IVirtualProcessorRoot Structure