Instâncias de agendador
Este documento descreve a função de instâncias do Agendador no Runtime de simultaneidade e como usar o concurrency::Scheduler e concurrency::CurrentScheduler classes para criar e gerenciar instâncias do Agendador.Instâncias do Agendador são úteis quando você deseja associar políticas explícitas de agendamento com tipos específicos de cargas de trabalho.Por exemplo, você pode criar uma instância de Agendador para executar algumas tarefas com uma prioridade de thread elevados e usar o agendador padrão para executar outras tarefas com prioridade normal do segmento.
Dica |
---|
O Runtime de simultaneidade oferece um agendador padrão e, portanto, não é necessário criar um em seu aplicativo.Como o Agendador de tarefas Ajuda a ajustar o desempenho de seus aplicativos, recomendamos que você inicie com o A modelos paralela a biblioteca (PPL) ou Biblioteca de agentes assíncrono se você for novo para o Runtime de simultaneidade. |
Seções
O Agendador e Classes de CurrentScheduler
Criando uma instância do Agendador
Gerenciar a vida útil de uma instância do Agendador
Métodos e recursos
Exemplo
O Agendador e Classes de CurrentScheduler
O Agendador de tarefas permite que os aplicativos usam um ou mais instâncias do Agendador para agendar o trabalho.O concurrency::Scheduler classe representa uma instância de Agendador e encapsula a funcionalidade que está relacionada a agendamento de tarefas.
Um thread que está conectado a um agendador é conhecido como um o contexto de execução, ou apenas contexto.Um programador pode estar ativa no contexto atual a qualquer momento.O Agendador ativo é também conhecido como o atual Agendador.O Runtime de simultaneidade usa o concurrency::CurrentScheduler classe para fornecer acesso ao Agendador do atual.O Agendador atual para um contexto pode diferir do Agendador para outro contexto atual.O tempo de execução não fornece uma representação de nível de processo do Agendador atual.
Normalmente, o CurrentScheduler classe é usada para acessar o Agendador atual.O Scheduler classe é útil quando você precisa para gerenciar um agendador não está atual.
As seções a seguir descrevem como criar e gerenciar uma instância do Agendador.Para um exemplo completo que ilustra essas tarefas, consulte Como: Gerenciar uma instância de agendador.
Top
Criando uma instância do Agendador
Essas três maneiras de criar um Scheduler objeto:
Se o Agendador não existir, o runtime cria um agendador padrão para você quando você usar a funcionalidade de tempo de execução, por exemplo, um algoritmo paralelo para realizar o trabalho.O agendador padrão se torna o Agendador atual para o contexto que inicia o trabalho paralelo.
O concurrency::CurrentScheduler::Create método cria um Scheduler objeto que usa uma diretiva específica e associa o contexto atual que o Agendador.
O concurrency::Scheduler::Create método cria um Scheduler objeto que usa uma diretiva específica, mas não o associará com o contexto atual.
Permitindo que o runtime crie um agendador padrão permite que todas as tarefas simultâneas compartilhar o mesmo Agendador.Normalmente, a funcionalidade fornecida pelo Biblioteca paralela de padrões (PPL) ou o Biblioteca de agentes assíncronos é usado para executar o trabalho paralelo.Portanto, não é necessário trabalhar diretamente com o Agendador para controlar sua diretiva ou o tempo de vida.Quando você usa a PPL ou a biblioteca de agentes, o runtime cria o agendador padrão se ele não existe e torna o Agendador atual para cada contexto.Quando você cria um agendador e defina-o como o Agendador atual, o runtime usa que o Agendador para agendar tarefas.Crie instâncias do Agendador adicionais somente quando você precisa de uma diretiva de agendamento específica.Para obter mais informações sobre as diretivas que estão associados com um Agendador, consulte Diretivas de agendador.
Top
Gerenciar a vida útil de uma instância do Agendador
O tempo de execução usa um mecanismo de contagem de referência para controlar a vida útil do Scheduler objetos.
Ao usar o CurrentScheduler::Create método ou a Scheduler::Create método para criar um Scheduler de objeto, o tempo de execução define a contagem de referência inicial de que o Agendador para um.O tempo de execução incrementa a contagem de referência quando você chamar o concurrency::Scheduler::Attach método.O Scheduler::Attach método associa o Scheduler o objeto com o contexto atual.Isso torna o Agendador atual.Quando você chamar o CurrentScheduler::Create método, o runtime cria um Scheduler de objeto (anexa ao contexto atual e define a contagem de referência a um).Você também pode usar o concurrency::Scheduler::Reference método para incrementar a contagem de referência de um Scheduler objeto.
Diminui o tempo de execução contagem de referência quando você chamar o concurrency::CurrentScheduler::Detach método para desanexar o Agendador atual, ou ligue para o concurrency::Scheduler::Release método.Quando a contagem de referência atinge zero, o runtime destrói o Scheduler objeto programado afinal concluir tarefas.Uma tarefa em execução é permitida para incrementar a contagem de referência do programador atual.Portanto, se a contagem de referência chega a zero e uma tarefa incrementa a contagem de referência, o runtime não destrói o Scheduler de objeto até que a contagem de referência chega a zero novamente e concluir todas as tarefas.
O tempo de execução mantém uma pilha interna de Scheduler objetos para cada contexto.Quando você chamar o Scheduler::Attach ou CurrentScheduler::Create empurra método, o tempo de execução que Scheduler o objeto na pilha para o contexto atual.Isso torna o Agendador atual.Quando você chamar CurrentScheduler::Detach, o runtime pops Agendador atual da pilha de contexto atual e define um anterior como programador atual.
O runtime fornece várias maneiras de gerenciar a vida útil de uma instância do Agendador.A tabela a seguir mostra o método apropriado que libera ou desanexa o Agendador do contexto atual para cada método que cria ou anexa um Agendador para o contexto atual.
Criar ou método de anexo |
Liberar ou desanexar método |
---|---|
CurrentScheduler::Create |
CurrentScheduler::Detach |
Scheduler::Create |
Scheduler::Release |
Scheduler::Attach |
CurrentScheduler::Detach |
Scheduler::Reference |
Scheduler::Release |
Chamando o inadequado liberar ou desanexar método produz o comportamento especificado em tempo de execução.
Quando você usa a funcionalidade, por exemplo, a PPL, que faz com que o tempo de execução criar o agendador padrão para você, não solte ou desanexar este agendador.O tempo de execução gerencia o tempo de vida de qualquer programador cria.
Porque o runtime não destrói um Scheduler o objeto antes de concluir todas as tarefas, você pode usar o concurrency::Scheduler::RegisterShutdownEvent método ou o concurrency::CurrentScheduler::RegisterShutdownEvent método para receber uma notificação quando um Scheduler objeto é destruído.Isso é útil quando você deve esperar de cada tarefa agendada por um Scheduler objeto para concluir.
Top
Métodos e recursos
Esta seção resume os métodos importantes de CurrentScheduler e Scheduler classes.
Pense no CurrentScheduler classe como auxiliar para a criação de um Agendador para uso no contexto atual.O Scheduler classe permite que você controle um agendador que pertence a outro contexto.
A tabela a seguir mostra os métodos importantes que são definidos pelo CurrentScheduler classe.
Método |
Descrição |
---|---|
Cria um Scheduler objeto que usa a diretiva especificada e associa o contexto atual. |
|
Recupera um ponteiro para o Scheduler o objeto que está associado com o contexto atual.Este método não incrementa a contagem de referência do Scheduler objeto. |
|
Desconecta o Agendador atual do contexto atual e define um anterior como programador atual. |
|
Registra um evento de tempo de execução define quando o Agendador atual é destruído. |
|
Cria um concurrency::ScheduleGroup objeto no Agendador do atual. |
|
Adiciona uma tarefa simples para a fila de agendamento do Agendador atual. |
|
Recupera uma cópia da diretiva que está associada com o Agendador atual. |
A tabela a seguir mostra os métodos importantes que são definidos pelo Scheduler classe.
Método |
Descrição |
---|---|
Cria um Scheduler objeto que usa a diretiva especificada. |
|
Associa o Scheduler o objeto com o contexto atual. |
|
Incrementa o contador de referência do Scheduler objeto. |
|
Decrementa o contador de referência do Scheduler objeto. |
|
Registra um evento que define o tempo de execução quando o Scheduler objeto é destruído. |
|
Cria um concurrency::ScheduleGroup de objeto na Scheduler objeto. |
|
Agenda uma tarefa leve o Scheduler objeto. |
|
Recupera uma cópia da diretiva que está associada a Scheduler objeto. |
|
Define a diretiva de execução para usar quando ele cria o agendador padrão. |
|
Restaura a diretiva padrão para aquele que estava ativa antes da chamada para SetDefaultSchedulerPolicy.Se o agendador padrão é criado após essa chamada, o tempo de execução usa as configurações de diretiva padrão para criar o Agendador. |
Top
Exemplo
Para obter exemplos básicos de como criar e gerenciar uma instância do Agendador, consulte Como: Gerenciar uma instância de agendador.
Consulte também
Tarefas
Como: Gerenciar uma instância de agendador