Compartilhar via


Grupos de cronograma

Este documento descreve a função dos grupos de agendamento no Runtime de simultaneidade.A grupo de agendamento affinitizes ou agrupa, tarefas relacionadas.Cada Agendador possui um ou mais grupos de agendamento.Use grupos de agendamento quando exigem um alto grau de localidade entre tarefas, por exemplo, quando um grupo de tarefas relacionadas se beneficiam em execução no mesmo nó de processador.Por outro lado, use instâncias do Agendador quando seu aplicativo tiver requisitos de qualidade específicos, por exemplo, quando você deseja limitar a quantidade de recursos de processamento que estão alocados para um conjunto de tarefas.Para obter mais informações sobre as instâncias do Agendador, consulte Instâncias de agendador.

DicaDica

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.

Cada Scheduler objeto tem um grupo de agendamento padrão para cada nó de agendamento.A agendamento nó mapeia para a topologia do sistema subjacente.O tempo de execução cria um nó de agendamento para cada pacote de processador ou arquitetura de memória não-uniforme (NUMA), qualquer que seja o número é maior.Se você explicitamente não associar uma tarefa com um grupo de agendamento, o Agendador escolhe qual grupo para adicionar a tarefa.

O SchedulingProtocol diretiva Agendador influencia a ordem na qual o Agendador executa as tarefas em cada grupo de agendamento.Quando SchedulingProtocol é definido como EnhanceScheduleGroupLocality (que é o padrão), o Agendador de tarefas escolhe a próxima tarefa a partir do grupo de agendamento que ele está trabalhando quando a tarefa atual termine ou cooperativa produz.O Agendador de tarefas Pesquisa grupo de agendamento atual para o trabalho antes de ele move para o próximo grupo disponível.Inversamente, quando SchedulingProtocol é definido como EnhanceForwardProgress, o Agendador move para o próximo grupo de agendamento após conclusão de cada tarefa ou produz.Para obter um exemplo que compara essas diretivas, consulte Como: Use grupos de cronograma para influenciar a ordem de execução.

O runtime usa o concurrency::ScheduleGroup classe para representar grupos de agendamento.Para criar um ScheduleGroup de objeto, chamar o concurrency::CurrentScheduler::CreateScheduleGroup ou concurrency::Scheduler::CreateScheduleGroup método.O tempo de execução usa um mecanismo de contagem de referência para controlar a vida útil do ScheduleGroup objetos, assim como faz com Scheduler objetos.Quando você cria um ScheduleGroup de objeto, o tempo de execução define um contador a referência.O concurrency::ScheduleGroup::Reference método incrementa o contador de referência por um.O concurrency::ScheduleGroup::Release decrementa método o contador de referência por um.

Muitos tipos de Runtime de simultaneidade permitem que você associe um objeto junto com um grupo de agendamento.Por exemplo, o concurrency::agent bloco de mensagem e classe classes como concurrency::unbounded_buffer, concurrency::join, e concurrency::timer, fornecem versões sobrecarregadas do construtor que tomar um ScheduleGroup objeto.O runtime usa o Scheduler objeto que está associado esta ScheduleGroup objeto para agendar a tarefa.

Você também pode usar o concurrency::ScheduleGroup::ScheduleTask método para agendar uma tarefa simples.Para obter mais informações sobre tarefas leves, consulte Tarefas leve.

Exemplo

Para obter um exemplo que usa grupos para controlar a ordem de execução de tarefas de agendamento, consulte Como: Use grupos de cronograma para influenciar a ordem de execução.

Consulte também

Tarefas

Como: Use grupos de cronograma para influenciar a ordem de execução

Conceitos

Agendador de tarefa (tempo de execução de simultaneidade)

Instâncias de agendador