Partilhar via


Diretivas de agendador

Este documento descreve a função de diretivas do Agendador no Runtime de simultaneidade.A diretiva Agendador controla a estratégia que o Agendador usa quando gerencia tarefas.Por exemplo, considere um aplicativo que requer algumas tarefas a executar em THREAD_PRIORITY_NORMAL e outras tarefas para executar no THREAD_PRIORITY_HIGHEST.Você pode criar duas instâncias do Agendador: uma que especifica o ContextPriority diretiva a ser THREAD_PRIORITY_NORMAL e outra que especifica a mesma diretiva a ser THREAD_PRIORITY_HIGHEST.

Usando diretivas de Agendador, você pode dividir os recursos de processamento disponíveis e atribuir um conjunto fixo de recursos para cada Agendador.Por exemplo, considere um algoritmo paralelo não ultrapassará quatro processadores.Você pode criar uma diretiva de Agendador limita suas tarefas para usar mais de quatro processadores simultaneamente.

DicaDica

O Runtime de simultaneidade oferece um agendador padrão.Portanto, não precisa 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.

Ao usar o concurrency::CurrentScheduler::Create, concurrency::Scheduler::Create, ou concurrency::Scheduler::SetDefaultSchedulerPolicy método para criar uma instância do Agendador, você fornecer um concurrency::SchedulerPolicy objeto que contém uma coleção de pares chave-valor que especifique o comportamento do Agendador.O SchedulerPolicy construtor aceita um número variável de argumentos.O primeiro argumento é o número de elementos de diretiva devem especificar.Os argumentos restantes são pares chave-valor de cada elemento de diretiva.O exemplo a seguir cria um SchedulerPolicy objeto que especifica os três elementos de diretiva.O runtime usa valores padrão para as chaves de diretiva que não são especificadas.

SchedulerPolicy policy(3,       
   MinConcurrency, 2,
   MaxConcurrency, 4,
   ContextPriority, THREAD_PRIORITY_HIGHEST
);

O concurrency::PolicyElementKey enumeração define as chaves de diretiva que estão associadas com o Agendador de tarefas.A tabela a seguir descreve as chaves de diretiva e o valor padrão que o runtime usa para cada um deles.

Chave de política

Descrição

Valor padrão

SchedulerKind

A concurrency::SchedulerType valor que especifica o tipo de segmentos usados para agendar tarefas.

ThreadScheduler(use threads normais).Este é o único valor válido para essa chave.

MaxConcurrency

Um unsigned int valor que especifica o número máximo de recursos de simultaneidade que usa o Agendador.

Concurrency::MaxExecutionResources

MinConcurrency

Um unsigned int valor que especifica o número mínimo de recursos de simultaneidade que usa o Agendador.

1

TargetOversubscriptionFactor

Um unsigned int valor que especifica quantos threads para alocar a cada recurso de processamento.

1

LocalContextCacheSize

Um unsigned int valor que especifica o número máximo de contextos que podem ser armazenados em cache na fila local de cada processador virtual.

8

ContextStackSize

Um unsigned int valor que especifica o tamanho da pilha, em quilobytes, para reservar para cada contexto.

0(use o tamanho de pilha padrão)

ContextPriority

Um int valor que especifica a prioridade do thread de cada contexto.Isso pode ser qualquer valor que você pode passar para SetThreadPriority ou INHERIT_THREAD_PRIORITY.

THREAD_PRIORITY_NORMAL

SchedulingProtocol

A concurrency::SchedulingProtocolType valor que especifica o algoritmo de programação para usar.

EnhanceScheduleGroupLocality

DynamicProgressFeedback

A concurrency::DynamicProgressFeedbackType valor que especifica se rebalancear recursos de acordo com as informações de progresso com base em estatísticas.

Nota não definir essa diretiva ProgressFeedbackDisabled porque está reservado para uso pelo tempo de execução.

ProgressFeedbackEnabled

Cada Agendador usa sua própria política quando agenda tarefas.As diretivas que estão associadas com um agendador não afetam o comportamento de outro Agendador.Além disso, você não pode alterar a diretiva de Agendador depois de criar o Scheduler objeto.

Observação importanteImportante

Use apenas diretivas de Agendador para controlar os atributos de segmentos que o runtime cria.Não altere a prioridade de segmentos criados pelo tempo de execução porque o que pode causar um comportamento indefinido ou afinidade de thread.

O runtime cria um agendador padrão para você, se você não criar explicitamente um.Se você deseja usar o agendador padrão no seu aplicativo, mas você deseja especificar uma diretiva para que o Agendador usar, chamar o concurrency::Scheduler::SetDefaultSchedulerPolicy método antes de agendar o trabalho paralelo.Se você não chamar o Scheduler::SetDefaultSchedulerPolicy método, usa a tempo de execução a diretiva padrão de valores da tabela.

Use o concurrency::CurrentScheduler::GetPolicy e concurrency::Scheduler::GetPolicy métodos para recuperar uma cópia da diretiva Agendador.Os valores de diretiva que você recebe de um desses métodos podem diferir os valores de diretiva que você especificar ao criar o Agendador.

Exemplo

Para examinar os exemplos que usam diretivas específicas do Agendador para controlar o comportamento do Agendador, consulte Como: Especificar políticas específicas de agendador e Como: Crie os agentes usando diretivas específicas de agendador.

Consulte também

Tarefas

Como: Especificar políticas específicas de agendador

Como: Crie os agentes usando diretivas específicas de agendador

Conceitos

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