Compartilhar via


Diretivas do Agendador

Este documento descreve a função das diretivas de Agendador no Runtime de simultaneidade. A a política de Agendador controla a estratégia que o Agendador usa quando ele gerencia as tarefas. Por exemplo, considere um aplicativo que requer para algumas tarefas de threads (UMS) agendáveis do modo de usuário e outras tarefas para usar o mecanismo de segmentação normal. Você pode criar duas instâncias do Agendador: um que especifica a criação de threads UMS como parte de sua política de Agendador e outro que especifica os threads normais como parte de sua política do Agendador. Para obter mais informações sobre UMS, consulte O agendamento de modo de usuário.

As diretivas do Agendador também permitem dividir os recursos de processamento disponíveis e atribuir um conjunto fixo de recursos para cada Agendador. Por exemplo, considere um algoritmo paralelo que não ultrapassará quatro processadores. Você pode criar uma diretiva de Agendador que limita as suas tarefas a usar mais de quatro processadores simultaneamente.

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.

Quando você usa o Concurrency::CurrentScheduler::Create, Concurrency::Scheduler::Create, ou Concurrency::Scheduler::SetDefaultSchedulerPolicy método para criar uma instância de Agendador para você fornecer um Concurrency::SchedulerPolicy o objeto que contém uma coleção de pares chave-valor que especifique o comportamento do Agendador. O SchedulerPolicy construtor utiliza um número variável de argumentos. O primeiro argumento é o número de elementos de diretiva que você está prestes a especificar. Os argumentos restantes são pares de chave-valor para cada elemento de diretiva. O exemplo a seguir cria um SchedulerPolicy objeto que especifica três elementos de diretiva. O runtime usa os valores padrão para as chaves de diretiva que não estã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 se deve usar threads normais ou threads UMS para agendar tarefas.

ThreadScheduler(use threads normais)

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 segmentos a ser alocada para 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 a fila de 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 deve ser rebalancear recursos de acordo com as informações de progresso com base em estatísticas.

Notanão defina essa diretiva para ProgressFeedbackDisabled. ProgressFeedbackDisabledestá reservado para uso pelo tempo de execução.

ProgressFeedbackEnabled

Cada Agendador usa sua própria política, quando ele agenda de tarefas. Portanto, as diretivas que estão associadas um agendador não afetam o comportamento de qualquer 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 as diretivas de Agendador para controlar os atributos de segmentos que o runtime cria. Alterando a afinidade de segmento ou a prioridade de segmentos que são criados pelo runtime produz um comportamento indefinido.

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, chame o Concurrency::Scheduler::SetDefaultSchedulerPolicy método antes de agendar o trabalho paralelo. Se você não chamar o Scheduler::SetDefaultSchedulerPolicy método, os usos de tempo de execução, a diretiva padrão de valores da tabela.

Use o Concurrency::CurrentScheduler::GetPolicy e o Concurrency::Scheduler::GetPolicy métodos para recuperar uma cópia da diretiva do Agendador. Os valores de diretiva que você recebe a partir desses métodos podem diferir dos valores de diretiva que você especifica ao criar o Agendador. Por exemplo, o UMSThreadDefault o valor de diretiva especifica que o Agendador usa os threads UMS se esse recurso está disponível no sistema operacional (por exemplo, a versão de 64 bits do Windows 7). Se os segmentos UMS não estiverem disponíveis, o Agendador define o valor da diretiva ThreadScheduler, que especifica que o Agendador usar threads normal.

Exemplo

Para obter exemplos que usam diretivas de Agendador específicos para controlar o comportamento do Agendador, consulte Como: Especificar políticas específicas do Agendador e Como: Criar agentes de políticas específicas do Agendador.

Consulte também

Tarefas

Como: Especificar políticas específicas do Agendador

Como: Criar agentes de políticas específicas do Agendador

Conceitos

Agendador de tarefas (Runtime de simultaneidade)

Histórico de alterações

Date

History

Motivo

Julho de 2010

Conteúdo reorganizado.

Aprimoramento de informações.