Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
A interface através da qual os agendadores se comunicam com o Gestor de Recursos do Ambiente de Execução Concorrente para negociar a alocação de recursos.
Sintaxe
struct ISchedulerProxy;
Membros
Métodos Públicos
| Nome | Description |
|---|---|
| ISchedulerProxy::BindContext | Associa um contexto de execução a um proxy de thread, caso não esteja já associado a um. |
| ISchedulerProxy::CreateOversubscriber | Cria uma nova raiz de processador virtual na thread de hardware associada a um recurso de execução existente. |
| ISchedulerProxy::RequestInitialVirtualProcessors | Solicita uma alocação inicial das raízes do processador virtual. Cada raiz de processador virtual representa a capacidade de executar um thread que pode realizar trabalho para o agendador. |
| ISchedulerProxy::Shutdown | Notifica o Gestor de Recursos de que o agendador está a desligar-se. Isto fará com que o Gestor de Recursos recupere imediatamente todos os recursos concedidos ao agendador. |
| ISchedulerProxy::SubscribeCurrentThread | Regista a thread atual no Gestor de Recursos, associando-a a este scheduler. |
| ISchedulerProxy::UnbindContext | Desassocia um proxy de execução do contexto de execução especificado pelo parâmetro pContext e devolve-o ao pool livre da fábrica de proxies de execução. Este método só pode ser chamado num contexto de execução que foi associado através do método ISchedulerProxy::BindContext e que ainda não foi iniciado por ser o parâmetro pContext de uma chamada de método IThreadProxy::SwitchTo. |
Observações
O Gestor de Recursos passa uma ISchedulerProxy interface a cada agendador que se regista com ele usando o método IResourceManager::RegisterScheduler .
Hierarquia de herança
ISchedulerProxy
Requerimentos
Cabeçalho: concrtrm.h
Namespace: simultaneidade
Método ISchedulerProxy::BindContext
Associa um contexto de execução a um proxy de thread, caso não esteja já associado a um.
virtual void BindContext(_Inout_ IExecutionContext* pContext) = 0;
Parâmetros
pContexto
Uma interface para o contexto de execução para associar a um proxy de thread.
Observações
Normalmente, o método IThreadProxy::SwitchTo liga um proxy de thread a um contexto de execução sob demanda. Existem, no entanto, circunstâncias em que é necessário ligar um contexto antecipadamente para garantir que o SwitchTo método muda para um contexto já vinculado. Este é o caso num contexto de agendamento UMS, pois não pode chamar métodos que alocam memória, e associar um proxy de thread pode envolver alocação de memória se um proxy de thread não estiver facilmente disponível no pool disponível da fábrica de proxies de threads.
invalid_argument é lançado se o parâmetro pContext tiver o valor NULL.
ISchedulerProxy::Método CreateOversubscriber
Cria uma nova raiz de processador virtual na thread de hardware associada a um recurso de execução existente.
virtual IVirtualProcessorRoot* CreateOversubscriber(_Inout_ IExecutionResource* pExecutionResource) = 0;
Parâmetros
pExecutionResource
Uma IExecutionResource interface que representa o thread de hardware que pretende sobresubscrever.
Valor de retorno
Uma interface IVirtualProcessorRoot.
Observações
Use este método quando o seu agendador quiser sobrecarregar um determinado fio de hardware durante um período limitado. Quando terminares com a raiz do processador virtual, deves devolvê-la ao gestor de recursos chamando o método Remover na IVirtualProcessorRoot interface.
Pode até superaprovisionar uma raiz de processador virtual existente, porque a interface IVirtualProcessorRoot herda da interface IExecutionResource.
ISchedulerProxy::Método RequestInitialVirtualProcessors
Solicita uma alocação inicial das raízes do processador virtual. Cada raiz de processador virtual representa a capacidade de executar um thread que pode realizar trabalho para o agendador.
virtual IExecutionResource* RequestInitialVirtualProcessors(bool doSubscribeCurrentThread) = 0;
Parâmetros
doSubscreverTópicoAtual
Se deve subscrever o tópico atual e contabilizá-lo durante a alocação de recursos.
Valor de retorno
A IExecutionResource interface para o thread atual, se o parâmetro doSubscribeCurrentThread tiver o valor true. Se o valor for false, o método devolve NULL.
Observações
Antes de um agendador executar qualquer trabalho, deve usar este método para solicitar raízes virtuais do processador ao Gestor de Recursos. O Gestor de Recursos acede à política do escalonador usando IScheduler::GetPolicy e utiliza os valores das chaves MinConcurrencyde política , MaxConcurrency e TargetOversubscriptionFactor determina quantas threads de hardware atribuir inicialmente ao escalonador e quantas raízes de processador virtual criar para cada thread de hardware. Para mais informações sobre como as políticas do agendador são usadas para determinar a alocação inicial de um agendador, consulte PolicyElementKey.
O Gestor de Recursos concede recursos a um agendador chamando o método IScheduler::AddVirtualProcessors com uma lista de raízes de processadores virtuais. O método é invocado como um retorno de chamada no agendador antes que este método regresse.
Se o agendador solicitou subscrição para o thread atual definindo o parâmetro doSubscribeCurrentThread para true, o método devolve uma IExecutionResource interface. A subscrição deve ser terminada posteriormente, utilizando o método IExecutionResource::Remove .
Ao determinar quais threads de hardware são selecionados, o Gestor de Recursos tentará otimizar para a afinidade dos nós do processador. Se for solicitada a subscrição para a thread atual, isso indica que a thread atual pretende participar do trabalho atribuído a este agendador. Nesse caso, as raízes dos processadores virtuais alocados estão localizadas no nó do processador onde a thread atual está a ser executada, se possível.
O ato de subscrever um thread aumenta o nível de subscrição do thread de hardware subjacente em um. O nível da subscrição é reduzido em um quando a subscrição é terminada. Para mais informações sobre níveis de subscrição, consulte IExecutionResource::CurrentSubscriptionLevel.
ISchedulerProxy::Método de Encerramento
Notifica o Gestor de Recursos de que o agendador está a desligar-se. Isto fará com que o Gestor de Recursos recupere imediatamente todos os recursos concedidos ao agendador.
virtual void Shutdown() = 0;
Observações
Todas IExecutionContext as interfaces que o escalonador recebeu como resultado de subscrever um thread externo usando os métodos ISchedulerProxy::RequestInitialVirtualProcessors ou ISchedulerProxy::SubscribeCurrentThread devem ser devolvidas ao Gestor de Recursos usando IExecutionResource::Remove antes de o agendador se desligar.
Se o seu agendador teve raízes de processador virtual desativadas, deve ativá-las usando IVirtualProcessorRoot::Activate, e fazer com que os proxies de thread que estão a executar nelas saiam do Dispatch método dos contextos de execução que estão a despachar antes de invocar Shutdown num proxy de agendador.
Não é necessário que o escalonador devolva individualmente todas as raízes do processador virtual que o Gestor de Recursos lhe concedeu através de chamadas ao método Remove, pois as raízes de todos os processadores virtuais serão devolvidas ao Gestor de Recursos no encerramento.
ISchedulerProxy::SubscribeCurrentThread Método
Regista a thread atual no Gestor de Recursos, associando-a a este scheduler.
virtual IExecutionResource* SubscribeCurrentThread() = 0;
Valor de retorno
A interface IExecutionResource que representa o thread atual em tempo de execução.
Observações
Use este método se quiser que o Gestor de Recursos tenha em conta a thread atual enquanto aloca recursos ao seu agendador e a outros agendadores. É especialmente útil quando o thread planeia participar no trabalho enfileirado para o seu agendador, juntamente com as raízes do processador virtual que o agendador recebe do Gestor de Recursos. O Gestor de Recursos utiliza a informação para evitar sobrescrevemento desnecessário de threads de hardware no sistema.
O recurso de execução recebido através deste método deve ser devolvido ao Gestor de Recursos usando o método IExecutionResource::Remove . O thread que chama o Remove método deve ser o mesmo thread que anteriormente chamou o SubscribeCurrentThread método.
O ato de subscrever um thread aumenta o nível de subscrição do thread de hardware subjacente em um. O nível da subscrição é reduzido em um quando a subscrição é terminada. Para mais informações sobre níveis de subscrição, consulte IExecutionResource::CurrentSubscriptionLevel.
Método ISchedulerProxy::UnbindContext
Desassocia um proxy de execução do contexto de execução especificado pelo parâmetro pContext e devolve-o ao pool livre da fábrica de proxies de execução. Este método só pode ser chamado num contexto de execução que foi associado através do método ISchedulerProxy::BindContext e que ainda não foi iniciado por ser o parâmetro pContext de uma chamada de método IThreadProxy::SwitchTo.
virtual void UnbindContext(_Inout_ IExecutionContext* pContext) = 0;
Parâmetros
pContexto
O contexto de execução para se dissociar do proxy de thread.
Consulte também
concorrência Namespace
Estrutura de IScheduler
Estrutura IThreadProxy
IVirtualProcessorRoot Structure
Estrutura IResourceManager