Compartir a través de


Directivas del programador

En este documento se describe el rol de las directivas de programador en el runtime de simultaneidad.Una directiva de programador controla la estrategia que el programador usa cuando administra tareas.Por ejemplo, considere la posibilidad de una aplicación que requiere algunas tareas que se ejecuta en THREAD_PRIORITY_NORMAL y otras tareas que se ejecuta en THREAD_PRIORITY_HIGHEST.Puede crear dos instancias de programador: uno que especifica la ContextPriority la directiva THREAD_PRIORITY_NORMAL y otra que especifica la misma directiva para ser THREAD_PRIORITY_HIGHEST.

Mediante las directivas de programador, puede dividir los recursos de procesamiento disponible y asignar un conjunto fijo de recursos a cada programador.Por ejemplo, considere un algoritmo paralelo que no se amplía para más de cuatro procesadores.Puede crear una directiva de programador que limite las tareas para que no usen más de cuatro procesadores simultáneamente.

SugerenciaSugerencia

El tiempo de ejecución de simultaneidad proporciona un programador de tareas predeterminada.Por lo tanto, no tiene que crear uno en la aplicación.Dado que el programador de tareas ayuda a ajustar el rendimiento de las aplicaciones, se recomienda que comience con Parallel Patterns Library (PPL) o Biblioteca de agentes asincrónicos si no ha usado antes el runtime de simultaneidad.

Al utilizar el concurrency::CurrentScheduler::Create, concurrency::Scheduler::Create, o concurrency::Scheduler::SetDefaultSchedulerPolicy método para crear una instancia de programador, proporciona un concurrency::SchedulerPolicy objeto que contiene una colección de pares de clave y valor que especifican el comportamiento del programador de.El constructor SchedulerPolicy toma un número variable de argumentos.El primer argumento es el número de elementos de directiva que está a punto de especificar.Los argumentos restantes son los pares clave-valor para cada elemento de directiva.En el siguiente ejemplo se crea un objeto SchedulerPolicy que especifica tres elementos de directiva.El tiempo de ejecución utiliza los valores predeterminados para las claves de directiva que no se han especificado.

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

El concurrency::PolicyElementKey (enumeración) define las claves de directiva que están asociadas con el programador de tareas.En la siguiente tabla se describen las claves de directiva y el valor predeterminado que el runtime usa para cada uno de ellos.

Clave de directiva

Descripción

Valor predeterminado

SchedulerKind

A concurrency::SchedulerType valor que especifica el tipo de subprocesos que se utiliza para programar tareas.

ThreadScheduler(utilice subprocesos normales).Este es el único valor válido para esta clave.

MaxConcurrency

Valor unsigned int que especifica el número máximo de recursos de simultaneidad que el programador usa.

Concurrency::MaxExecutionResources

MinConcurrency

Un valor unsigned int que especifica el número mínimo de recursos de simultaneidad que el programador utiliza.

1

TargetOversubscriptionFactor

Un valor unsigned int que especifica cuántos subprocesos se asignan a cada recurso de procesamiento.

1

LocalContextCacheSize

Un valor unsigned int que especifica el número máximo de contextos que pueden estar almacenados en memoria caché en la cola local de cada procesador virtual.

8

ContextStackSize

Un valor unsigned int que especifica el tamaño de la pila, en kilobytes, que se reserva para cada contexto.

0 (usa el tamaño de pila predeterminado)

ContextPriority

Un valor int que especifica la prioridad del subproceso de cada contexto.Puede ser cualquier valor que se pueda pasar a SetThreadPriority o INHERIT_THREAD_PRIORITY.

THREAD_PRIORITY_NORMAL

SchedulingProtocol

A concurrency::SchedulingProtocolType valor que especifica el algoritmo de programación para utilizar.

EnhanceScheduleGroupLocality

DynamicProgressFeedback

A concurrency::DynamicProgressFeedbackType valor que especifica si se va a equilibrar los recursos de acuerdo con información basada en las estadísticas de progreso.

Nota no se establece esta directiva en ProgressFeedbackDisabled porque está reservado para su uso por el tiempo de ejecución.

ProgressFeedbackEnabled

Cada programador utiliza su propia directiva cuando programa tareas.Las directivas que están asociadas con un programador no afectan al comportamiento de cualquier otro programador.Además, no puede cambiar la directiva de programador después de crear el objeto Scheduler.

Nota importanteImportante

Use solo directivas de programador para controlar los atributos de los subprocesos que el runtime crea.No cambie la afinidad de subprocesos o prioridad de subprocesos creados por el tiempo de ejecución ya podría causar un comportamiento indefinido.

El runtime creará un programador predeterminado si no crea uno explícitamente.Si desea utilizar el programador predeterminado en la aplicación, pero desea especificar una directiva para que el programador utilice, llame a la concurrency::Scheduler::SetDefaultSchedulerPolicy método antes de programar trabajos paralelos.Si no llama al método Scheduler::SetDefaultSchedulerPolicy, el runtime utiliza los valores de directiva predeterminados de la tabla.

Uso del concurrency::CurrentScheduler::GetPolicy y el concurrency::Scheduler::GetPolicy métodos para recuperar una copia de la directiva de programador.Los valores de directiva que se reciben de estos métodos pueden diferir de los valores de directiva que se especifican cuando se crea el programador.

Ejemplo

Para examinar ejemplos que utilizan las directivas de programador específico para controlar el comportamiento del programador, consulte Cómo: Especificar directivas de programador concretas y Cómo: Crear agentes que usen directivas de programador específicas.

Vea también

Tareas

Cómo: Especificar directivas de programador concretas

Cómo: Crear agentes que usen directivas de programador específicas

Conceptos

Programador de tareas (Runtime de simultaneidad)