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 das políticas do agendador no Concurrency Runtime. Uma política de agendador controla a estratégia que o agendador usa quando gerencia tarefas. Por exemplo, considere um aplicativo que requer algumas tarefas para executar em THREAD_PRIORITY_NORMAL e outras tarefas para executar em THREAD_PRIORITY_HIGHEST. Você pode criar duas instâncias do agendador: uma que especifica a ContextPriority política a ser THREAD_PRIORITY_NORMAL e outra que especifica a mesma política a ser THREAD_PRIORITY_HIGHEST.
Usando políticas do agendador, você pode dividir os recursos de processamento disponíveis e atribuir um conjunto fixo de recursos a cada agendador. Por exemplo, considere um algoritmo paralelo que não seja dimensionado além de quatro processadores. Você pode criar uma política de agendador que limite suas tarefas para usar no máximo quatro processadores simultaneamente.
Sugestão
O Concurrency Runtime fornece um agendador padrão. Portanto, você não precisa 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.
Quando você usa o método concurrency::CurrentScheduler::Create, concurrency::Scheduler::Create ou concurrency::Scheduler::SetDefaultSchedulerPolicy para criar uma instância do agendador, você fornece um objeto concurrency::SchedulerPolicy que contém uma coleção de pares chave-valor que especificam o comportamento do agendador. O SchedulerPolicy construtor usa um número variável de argumentos. O primeiro argumento é o número de elementos de política que está prestes a especificar. Os argumentos restantes são pares chave-valor para cada elemento de política. O exemplo a seguir cria um SchedulerPolicy objeto que especifica três elementos de política. O tempo de execução usa valores padrão para as chaves de política que não são especificadas.
SchedulerPolicy policy(3,
MinConcurrency, 2,
MaxConcurrency, 4,
ContextPriority, THREAD_PRIORITY_HIGHEST
);
A enumeração concurrency::P olicyElementKey define as chaves de política associadas ao Agendador de Tarefas. A tabela a seguir descreve as chaves de política e o valor padrão que o tempo de execução usa para cada uma delas.
| Chave política | Descrição | Valor padrão |
|---|---|---|
SchedulerKind |
Um valor concurrency::SchedulerType que especifica o tipo de threads a serem usados para agendar tarefas. |
ThreadScheduler (usar fios normais). Este é o único valor válido para esta chave. |
MaxConcurrency |
Um unsigned int valor que especifica o número máximo de recursos de simultaneidade que o agendador usa. |
concorrência::MaxExecutionResources |
MinConcurrency |
Um unsigned int valor que especifica o número mínimo de recursos de simultaneidade que o agendador usa. |
1 |
TargetOversubscriptionFactor |
Um unsigned int valor que especifica quantos threads alocar 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 na fila local de cada processador virtual. |
8 |
ContextStackSize |
Um unsigned int valor que especifica o tamanho da pilha, em kilobytes, reservado para cada contexto. |
0 (use o "stack size" padrão) |
ContextPriority |
Um int valor que especifica a prioridade de thread de cada contexto. Isso pode ser qualquer valor que você possa passar para SetThreadPriority ou INHERIT_THREAD_PRIORITY. |
THREAD_PRIORITY_NORMAL |
SchedulingProtocol |
Um valor concurrency::SchedulingProtocolType que especifica o algoritmo de agendamento a ser usado. | EnhanceScheduleGroupLocality |
DynamicProgressFeedback |
Um valor concurrency::D ynamicProgressFeedbackType que especifica se os recursos devem ser rebalanceados de acordo com informações de progresso baseadas em estatísticas. Observação Não defina essa política como ProgressFeedbackDisabled porque ela está reservada para uso pelo tempo de execução. |
ProgressFeedbackEnabled |
Cada agendador usa sua própria política quando agenda tarefas. As políticas associadas a um agendador não afetam o comportamento de nenhum outro agendador. Além disso, não é possível alterar a política do agendador depois de criar o Scheduler objeto.
Importante
Use apenas políticas de agendador para controlar os atributos para threads criados pelo tempo de execução. Não altere a afinidade ou a prioridade de threads criados pelo tempo de execução porque isso pode causar um comportamento indefinido.
O tempo de execução cria um agendador padrão para você se você não criar explicitamente um. Se você quiser usar o agendador padrão em seu aplicativo, mas quiser especificar uma política para esse agendador usar, chame o método concurrency::Scheduler::SetDefaultSchedulerPolicy antes de agendar o trabalho paralelo. Se você não chamar o Scheduler::SetDefaultSchedulerPolicy método, o tempo de execução usará os valores de política padrão da tabela.
Use os métodos concurrency::CurrentScheduler::GetPolicy e concurrency::Scheduler::GetPolicy para recuperar uma cópia da política do agendador. Os valores de política que você recebe desses métodos podem diferir dos valores de política especificados ao criar o agendador.
Exemplo
Para examinar exemplos que usam políticas de agendador específicas para controlar o comportamento do agendador, consulte Como especificar políticas específicas do agendador e Como criar agentes que usam políticas específicas do agendador.
Ver também
Agendador de Tarefas
Como: Especificar políticas específicas do agendador
Como criar agentes que usam políticas específicas de agendamento