Grupos de agendas
Este documento descreve a função de grupos de agenda em tempo de execução de simultaneidade. Um grupo da agenda affinitizes, ou grupos, tarefas relacionadas em conjunto. Cada agendador possui um ou mais grupos da agenda. Grupos de agenda de uso quando você precisar de um alto nível de localidade entre tarefas, por exemplo, quando um grupo de tarefas relacionadas se beneficiar da execução no mesmo nó do processador. Por outro lado, o agendador de uso instâncias quando seu aplicativo tem requisitos de qualidade específicos, por exemplo, quando você quiser limitar a quantidade de recursos de processamento que é atribuída a um conjunto de tarefas. Para obter mais informações sobre as instâncias do agendador, consulte Instâncias de agendador.
Dica
O tempo de execução de simultaneidade fornece um agendador padrão, e em virtude disso não é necessário criar um relatório em seu aplicativo.Como o agendador de tarefas o ajuda a ajustar o desempenho dos aplicativos, recomendamos que você comece com Biblioteca de padrões paralelos (PPL) ou Biblioteca de Agentes Assíncronos se você é novato em tempo de execução de simultaneidade.
Cada objeto de Scheduler tem um grupo padrão de agenda para cada nó de programação. Mapas de um nó de programação à topologia de sistema subjacente. O tempo de execução cria um nó do agendamento para cada nó de (NUMA) da arquitetura de memória do pacote ou de não uniforme de processador, o que for maior. Se você não associar explicitamente uma tarefa a um grupo da agenda, o agendador escolhe a qual cluster para adicionar a tarefa.
A política de agendador de SchedulingProtocol influencia a ordem na qual o agendador executa as tarefas em cada grupo da agenda. Quando SchedulingProtocol é definido como EnhanceScheduleGroupLocality (que é o padrão), o agendador de tarefas escolhe a próxima tarefa do grupo de agenda que está funcionando em quando a tarefa atual for concluído ou está cooperativa. O agendador de tarefas a seguir pesquisa o grupo atual da agenda do trabalho antes que se move ao grupo disponível. Por outro lado, quando SchedulingProtocol é definido como EnhanceForwardProgress, o moverá do agendador para o próximo grupo de agenda após cada tarefa é concluída ou está. Para obter um exemplo que compara essas políticas, consulte Como usar grupos de agendas para influenciar a ordem de execução.
O tempo de execução usa a classe de concurrency::ScheduleGroup para representar grupos da agenda. Para criar um objeto de ScheduleGroup , chame o método de concurrency::CurrentScheduler::CreateScheduleGroup ou de concurrency::Scheduler::CreateScheduleGroup . O tempo de execução usa um mecanismo de referência- contagem para controlar o tempo de vida de objetos de ScheduleGroup , como faz com objetos de Scheduler . Quando você cria um objeto de ScheduleGroup , o tempo de execução define a referência ao contrário de uma. O método de concurrency::ScheduleGroup::Reference incrementa a referência do contador por uma. O método de concurrency::ScheduleGroup::Release diminui a referência do contador por uma.
Muito no tempo de execução de simultaneidade deixe-o associar um objeto junto com um grupo da agenda. Por exemplo, a classe de concurrency::agent e o bloco da mensagem de classificação como concurrency::unbounded_buffer, concurrency::join, e concurrency::timer, o fornece as versões sobrecarregadas do construtor que possuem um objeto de ScheduleGroup . O tempo de execução usa o objeto de Scheduler associado a este objeto de ScheduleGroup de agendamento da tarefa.
Você também pode usar o método de concurrency::ScheduleGroup::ScheduleTask para agendar uma tarefa de peso leve. Para obter mais informações sobre as tarefas de peso leve, consulte Tarefas leves.
Exemplo
Para obter um exemplo que usa grupos de agenda para controlar a ordem de execução da tarefa, consulte Como usar grupos de agendas para influenciar a ordem de execução.
Consulte também
Tarefas
Como usar grupos de agendas para influenciar a ordem de execução