Grupos de programación
En este documento se describe el rol de los grupo de programación en el Runtime de simultaneidad. Un grupo de programación crea afinidad entre tareas relacionadas o las agrupa. Cada programador tiene uno o varios grupos de programación. Use los grupos de programación si necesita aplicar un grado elevado de localidad entre las tareas (por ejemplo, si resulta positivo para un grupo de tareas relacionadas ejecutarse en el mismo nodo del procesador). Por el contrario, use instancias del programador cuando la aplicación tenga requisitos de calidad específicos, por ejemplo, cuando desee limitar la cantidad de recursos de procesamiento que se asignan a un conjunto de tareas. Para obtener más información sobre las instancias del programador, consulte Instancias del programador.
Sugerencia
Runtime de simultaneidad proporciona un programador predeterminado, por lo que no deberá crear uno en la aplicación. El Programador de tareas permite ajustar el rendimiento de las aplicaciones por lo que, si no está familiarizado con Runtime de simultaneidad, se recomienda comenzar con la biblioteca de modelos paralelos (PPL) o la biblioteca de agentes asincrónicos.
Cada objeto Scheduler
tiene un grupo de programación predeterminado para cada nodo de programación. Un nodo de programación se asigna a la topología del sistema subyacente. El tiempo de ejecución crea un nodo de programación para cada paquete de procesador o nodo de arquitectura de memoria no uniforme (NUMA), el número que sea mayor. Si no asocia explícitamente una tarea a un grupo de programación, el programador elige a qué grupo agregar la tarea.
La directiva del programador SchedulingProtocol
influye en el orden en que el programador ejecuta las tareas de cada grupo de programación. Cuando SchedulingProtocol
se establece en EnhanceScheduleGroupLocality
(que es el valor predeterminado), el Programador de tareas elige la siguiente tarea del grupo de programación en el que está trabajando cuando la tarea actual finaliza o se suspende de forma cooperativa. El Programador de tareas busca trabajo en el grupo de programación actual antes de pasar al siguiente grupo disponible. Por el contrario, cuando SchedulingProtocol
se establece en EnhanceForwardProgress
, el programador se mueve al siguiente grupo de programación después de que cada tarea finaliza o se suspende. Para obtener un ejemplo que compare estas directivas, consulte Cómo usar grupos de programación para influir en el orden de ejecución.
El tiempo de ejecución usa la clase concurrency::ScheduleGroup para representar grupos de programación. Para crear un objeto ScheduleGroup
, llame al método concurrency::CurrentScheduler::CreateScheduleGroup o concurrency::Scheduler::CreateScheduleGroup. El tiempo de ejecución usa un mecanismo de recuento de referencias para controlar la duración de los objetos ScheduleGroup
, igual que con los objetos Scheduler
. Cuando se crea un objeto ScheduleGroup
, el tiempo de ejecución establece el contador de referencias en uno. El método concurrency::ScheduleGroup::Reference incrementa el contador de referencias por uno. El método concurrency::ScheduleGroup::Release disminuye el contador de referencias por uno.
Muchos tipos en el Runtime de simultaneidad permiten asociar un objeto junto con un grupo de programación. Por ejemplo, la clase concurrency::agent y las clases de bloque de mensajes concurrency::unbounded_buffer, concurrency::join y concurrency::timer, proporcionan versiones sobrecargadas del constructor que toman un objeto ScheduleGroup
. El tiempo de ejecución usa el objeto Scheduler
asociado a este objeto ScheduleGroup
para programar la tarea.
También puede usar el método concurrency::ScheduleGroup::ScheduleTask para programar una tarea ligera. Para obtener más información sobre las tareas ligeras, consulte Tareas ligeras.
Ejemplo
Para obtener un ejemplo que usa grupos de programación para controlar el orden de ejecución de tareas, consulte Cómo usar grupos de programación para influir en el orden de ejecución.
Consulte también
Programador de tareas
Instancias de Scheduler
Procedimiento para usar grupos de programación para influir en el orden de ejecución