Compartilhar via


Instâncias do Agendador

Este documento descreve a função de instâncias do Agendador em tempo de execução 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 a tipos específicos de cargas de trabalho de diretivas de agendamento explícitas. Por exemplo, você pode criar uma instância do Agendador para executar algumas tarefas em uma prioridade de thread elevado e usar o agendador padrão para executar outras tarefas com a prioridade de segmento normais.

Dica

O Runtime de simultaneidade fornece um programador de padrão e, portanto, não é necessário criá-lo em seu aplicativo. Como o Agendador de tarefas Ajuda a ajustar o desempenho de seus aplicativos, recomendamos que você inicie com o Biblioteca paralela de padrões (PPL) ou Biblioteca de agentes assíncronos se você for novo no 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 segmento que está conectado a um agendador é conhecido como um o contexto de execução, ou apenas contexto. Um programador pode ser ativo no contexto atual a qualquer momento. O Agendador ativo também é conhecido como o atual Agendador. O Runtime de simultaneidade usa a 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 runtime 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 gerenciar um agendador que não é atual.

As seções a seguir descrevem como criar e gerenciar uma instância do Agendador. Para obter um exemplo completo que ilustra essas tarefas, consulte Como: Gerenciar uma instância do Agendador.

go to top

Criando uma instância do Agendador

Esses três maneiras para criar um Scheduler objeto:

  • Se o Agendador não existir, o runtime cria um agendador padrão para você quando você usa 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 uma Scheduler o objeto que usa uma diretiva específica e associa o que o Agendador com o contexto atual.

  • O Concurrency::Scheduler::Create método cria uma Scheduler o objeto que usa uma diretiva específica, mas não associar o contexto atual.

Permitindo que o tempo de execução criar um agendador padrão que 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, você não precisará 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 permite que o Agendador atual para cada contexto. Quando você cria um agendador e defini-la como o Agendador atual, o runtime usa que o Agendador para agendar tarefas. Crie instâncias do Agendador adicionais somente quando você precisar de uma diretiva de agendamento específica. Para obter mais informações sobre as diretivas que estão associados um Agendador, consulte Diretivas do Agendador.

go to top

Gerenciar a vida útil de uma instância do Agendador

O tempo de execução usa o mecanismo de contagem de referência para controlar a vida útil do Scheduler objetos.

Quando você usa o CurrentScheduler::Create método ou a Scheduler::Create método para criar um Scheduler o objeto, o runtime define a contagem de referência inicial de que o Agendador como 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 associates a Scheduler objeto junto com o contexto atual. Isso torna o Agendador atual. Ao chamar o CurrentScheduler::Create o runtime de método, cria um Scheduler de objeto e anexa-o 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.

A decrementa runtime 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 chega a zero, o runtime destrói o Scheduler objeto afinal agendada término de tarefas. Uma tarefa em execução é permitida para incrementar a contagem de referência do Agendador 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 o objeto até que a contagem de referência novamente atinge zero e todas as tarefas concluir.

O tempo de execução mantém uma pilha interna de Scheduler objetos para cada contexto. Quando você chama o Scheduler::Attach ou CurrentScheduler::Create método, o runtime empurra que Scheduler o objeto na pilha para o contexto atual. Isso torna o Agendador atual. Quando você chamar CurrentScheduler::Detach, o tempo de execução se desprenda do Agendador atual da pilha de contexto atual e define um anterior como o Agendador 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 um método

CurrentScheduler::Create

CurrentScheduler::Detach

Scheduler::Create

Scheduler::Release

Scheduler::Attach

CurrentScheduler::Detach

Scheduler::Reference

Scheduler::Release

Chamando o inadequado para liberar ou desanexar o comportamento do método produz não especificado no runtime.

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 liberar ou desanexar este Agendador. O runtime gerencia a vida útil de qualquer programador que ele 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 a Concurrency::CurrentScheduler::RegisterShutdownEvent método para receber uma notificação quando um Scheduler objeto é destruído. Isso é útil quando você deve aguardar a cada tarefa é agendada por uma Scheduler o objeto para concluir.

go to top

Métodos e recursos

Esta seção resume os métodos importantes para o 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 controlar 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

Create

Cria um Scheduler o objeto que usa a diretiva especificada e o associa com o contexto atual.

Get

Recupera um ponteiro para o Scheduler objeto que está associado ao contexto atual. Este método não incrementa a contagem de referência da Scheduler objeto.

Desanexar

Desconecta o Agendador atual no contexto atual e define um anterior como programador atual.

RegisterShutdownEvent

Registra um evento que o runtime define quando o Agendador atual é destruído.

CreateScheduleGroup

Cria um Concurrency::ScheduleGroup o objeto no Agendador do atual.

ScheduleTask

Adiciona uma tarefa leve para a fila de agendamento do Agendador atual.

GetPolicy

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

Create

Cria um Scheduler objeto que usa a diretiva especificada.

Anexar

Associa o Scheduler objeto junto com o contexto atual.

Referência

Incrementa o contador de referência da Scheduler objeto.

Versão

Diminui o contador de referência da Scheduler objeto.

RegisterShutdownEvent

Registra um evento que o runtime define quando o Scheduler objeto é destruído.

CreateScheduleGroup

Cria um Concurrency::ScheduleGroup de objeto na Scheduler objeto.

ScheduleTask

Agenda uma tarefa leve a partir de Scheduler objeto.

GetPolicy

Recupera uma cópia da diretiva que está associada a Scheduler objeto.

SetDefaultSchedulerPolicy

Define a diretiva de execução para usar quando cria o agendador padrão.

ResetDefaultSchedulerPolicy

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 runtime usa as configurações de diretiva padrão para criar o Agendador.

go to top

Exemplo

Para obter exemplos básicos de como criar e gerenciar uma instância do Agendador, consulte Como: Gerenciar uma instância do Agendador.

Consulte também

Conceitos

Agendador de tarefas (Runtime de simultaneidade)

Outros recursos

Como: Gerenciar uma instância do Agendador

Diretivas do Agendador

Grupos de agendamento

Histórico de alterações

Date

History

Motivo

Julho de 2010

Conteúdo reorganizado.

Aprimoramento de informações.