Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Este documento descreve a função dos grupos de agendamento no Concurrency Runtime. Um grupo de agendamento afilia, ou agrupa, tarefas relacionadas juntas. Cada agendador tem um ou mais grupos de agendamento. Use grupos de agendamento quando precisar de um alto grau 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, use instâncias do agendador quando seu aplicativo tiver requisitos de qualidade específicos, por exemplo, quando você quiser limitar a quantidade de recursos de processamento alocados para um conjunto de tarefas. Para obter mais informações sobre instâncias do agendador, consulte Instâncias do agendador.
Sugestão
O Concurrency Runtime fornece um agendador padrão e, portanto, você não é obrigado a criar um em seu aplicativo. Como o Agendador de Tarefas ajuda a ajustar o desempenho de seus aplicativos, recomendamos que você comece com a Biblioteca de Padrões Paralelos (PPL) ou a Biblioteca de Agentes Assíncronos se você for novo no Tempo de Execução de Simultaneidade.
Cada Scheduler objeto tem um grupo de agendamento padrão para cada nó de agendamento. Um nó de agendamento corresponde à topologia subjacente do sistema. **
O tempo de execução cria um nó de agendamento para cada pacote do processador ou nó NUMA (Non-Uniform Memory Architecture), consoante o número que for maior. Se você não associar explicitamente uma tarefa a um grupo de agendas, o agendador escolhe a qual grupo adicionar a tarefa.
A SchedulingProtocol política do agendador influencia a ordem na qual o agendador executa as tarefas em cada grupo de agendas. Quando SchedulingProtocol é definido como EnhanceScheduleGroupLocality (que é o padrão), o Agendador de Tarefas escolhe a próxima tarefa do grupo de agendamento em que está trabalhando quando a tarefa atual é concluída ou produz cooperativamente. O Agendador de Tarefas pesquisa trabalho no grupo de agendas atual antes de passar para o próximo grupo disponível. Por outro lado, quando SchedulingProtocol é definido como EnhanceForwardProgress, o agendador move-se para o próximo grupo de agendamento depois que cada tarefa termina ou cede. Para obter um exemplo que compara essas políticas, consulte Como usar grupos de agendamento para influenciar a ordem de execução.
O runtime usa a classe concurrency::ScheduleGroup para representar grupos de agendamento. Para criar um ScheduleGroup objeto, chame o método concurrency::CurrentScheduler::CreateScheduleGroup ou concurrency::Scheduler::CreateScheduleGroup . O ambiente de execução usa um mecanismo de contagem de referências para controlar o tempo de vida dos objetos ScheduleGroup, assim como faz com os objetos Scheduler. Quando você cria um ScheduleGroup objeto, o tempo de execução define o contador de referência como um. O método concurrency::ScheduleGroup::Reference incrementa o contador de referência em um. O método concurrency::ScheduleGroup::Release diminui o contador de referência em um.
Muitos tipos no Concurrency Runtime permitem associar um objeto a um grupo de agendas. Por exemplo, a classe concurrency::agent e as classes de bloco de mensagem, como concurrency::unbounded_buffer, concurrency::join e concurrency::timer, fornecem versões sobrecarregadas do construtor que usam um ScheduleGroup objeto. O runtime usa o objeto Scheduler que está associado ao objeto ScheduleGroup para agendar a tarefa.
Você também pode usar o método concurrency::ScheduleGroup::ScheduleTask para agendar uma tarefa leve. Para obter mais informações sobre tarefas leves, consulte Tarefas leves.
Exemplo
Para obter um exemplo que usa grupos de agendamento para controlar a ordem de execução da tarefa, consulte Como usar grupos de agendamento para influenciar a ordem de execução.
Ver também
Agendador de Tarefas
Instâncias do Agendador
Como: Usar grupos de agendamento para influenciar a ordem de execução