Grupos de programación
En este documento se describe el rol de los grupos de programación en el runtime de simultaneidad.Un grupo de programación establece afinidades, o agrupa, tareas relacionadas.Cada programador tiene uno o más grupos de programación.Use los grupos de programación cuando necesite un alto grado de emplazamiento entre las tareas, por ejemplo, cuando un grupo de tareas relacionadas se beneficia de 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 de programador, vea Instancias del programador.
Sugerencia |
---|
El runtime de simultaneidad proporciona un programador predeterminado y, por tanto, no es necesario 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. |
Cada objeto Scheduler tiene un grupo de programación predeterminado por cada nodo de programación.Un nodo de programación se asigna a la topología subyacente del sistema.Por cada paquete de procesador, el runtime crea un nodo de programación o un nodo Arquitectura de memoria no uniforme (NUMA), el que sea mayor.Si no asocia explícitamente una tarea a un grupo de programación, el programador elige a qué grupo va a agregar la tarea.
La directiva de programador SchedulingProtocol influye en el orden en el que el programador ejecuta las tareas en cada grupo de programación.Cuando SchedulingProtocol está establecido en EnhanceScheduleGroupLocality (que es el valor predeterminado), el Programador de tareas elige la tarea siguiente del grupo de programación en que está funcionando cuando la tarea actual finaliza o cuando cede de manera cooperativa.El Programador de tareas busca el trabajo de grupo de programación actual antes de pasar al grupo disponible siguiente.A la inversa, cuando SchedulingProtocol está establecido en EnhanceForwardProgress, el programador pasa al grupo de programación siguiente cuando cada tarea finaliza o cede.Para obtener un ejemplo que compara estas directivas, vea Cómo: Usar grupos de programación para influir en el orden de ejecución.
El tiempo de ejecución utiliza la concurrency::ScheduleGroup clase para representar grupos de programación.Para crear un ScheduleGroup de objeto, llame a la concurrency::CurrentScheduler::CreateScheduleGroup o concurrency::Scheduler::CreateScheduleGroup método.El runtime utiliza un mecanismo de recuento de referencias para controlar la duración de los objetos ScheduleGroup, al igual que con objetos Scheduler.Al crear un objeto ScheduleGroup, el runtime establece el contador de referencias en uno.El concurrency::ScheduleGroup::Reference método incrementa el contador de referencias en uno.El concurrency::ScheduleGroup::Release método disminuye el contador de referencias por uno.
Muchos tipos del Runtime de simultaneidad permiten asociar un objeto a un grupo de programación.Por ejemplo, la concurrency::agent clases de bloque de clase y el mensaje como concurrency::unbounded_buffer, concurrency::join, y concurrency::timer, proporcionar versiones sobrecargadas del constructor que tomen un ScheduleGroup objeto.El runtime utiliza el objeto Scheduler asociado al objeto ScheduleGroup para programar la tarea.
También puede utilizar el concurrency::ScheduleGroup::ScheduleTask método para programar una tarea ligera.Para obtener más información sobre las tareas ligeras, vea Tareas ligeras.
Ejemplo
Para obtener un ejemplo en el que se usan los grupos de programación para controlar el orden de ejecución de la tarea, vea Cómo: Usar grupos de programación para influir en el orden de ejecución.
Vea también
Tareas
Cómo: Usar grupos de programación para influir en el orden de ejecución