Ponte en Contacto
 Duración 28 horas

Temario del curso

Desafíos y problemas de la concurrencia

  • Limitaciones de hardware de las plataformas: hilos de hardware, tuberías, coherencia de memoria en caché
  • Conceptos elementales relacionados con la programación concurrente (corrección del programa, ciclo de vida, inanición, interbloqueo, condiciones de carrera, atomicidad, modelos de coherencia, taxonomía de Flynn)
  • Mecanismos disponibles en C++ para implementar concurrencia y paralelismo
  • Implementación de la biblioteca estándar: componentes desde C++14 hasta la actualidad (C++2a)
  • Implementación disponible en Boost: diferencias con respecto a la biblioteca estándar

Procesos y hilos

  • Aplicaciones multi-proceso versus multi-hilo
  • Sistema operativo y hilos (visión general breve de las implementaciones disponibles)
  • Mecanismos de sincronización de procesos y hilos
  • Implementación estructural de la sincronización
  • Especifidades de la implementación de la concurrencia en un enfoque orientado a objetos (papel del patrón RAII)

Modelo de memoria en C++

  • Objetos y ubicaciones en memoria
  • Ordenación de operaciones y su aplicación
  • Relaciones: sincronización, ordenamiento de operaciones a favor de acciones atómicas, secuencias de liberación
  • Barreras de memoria
  • Operaciones atómicas

Gestión de hilos en C++14 y posteriores

  • Clase std::thread y ejecución de hilos
  • Identificación del hilo
  • Adjuntar y desvincular hilos
  • Hilos versus contenedores estándar
  • Manejo de excepciones en hilos de C++14

Exclusión mutua y secciones críticas

  • Reglas básicas de exclusión mutua
  • Conceptos (tipos) de objetos bloqueantes disponibles
  • Introducción rápida al manejo del tiempo en C++14 (biblioteca chrono)
  • Clases std::mutex, std::timed_mutex, std::shared_mutex y sus derivados
  • Patrón RAII en el manejo de bloqueos (std::lock_guard, std::unique_lock)
  • Bloqueos dependientes y diferidos (std::lock)
  • Propiedad y co-propiedad de bloqueos y hilos
  • Problema lectores-escritores
  • Inicialización única
  • Memoria local (privada) del hilo (std::thread_local)

Bloqueos y sincronización de hilos

  • Operaciones con semáforos
  • Bloqueos recursivos
  • Bloqueos con definición de nivel de bloqueo
  • Variables de decisión y cooperación con bloqueos
  • Implementación de barreras activas y pasivas (esperas ociosas, esperas activas)
  • Reanudación de la ejecución de hilos
  • Comunicación entre hilos (modelo Actor y CSP)

Tareas asíncronas

  • Eventos asíncronos y su manejo
  • Futuros
  • Promesas
  • Tareas preparadas

Tipos atómicos

  • Tipos atómicos estándar
  • Bandera atómica universal (std::atomic_flag)
  • Plantilla de clase "std::atomic[T]" y sus especializaciones
  • Funciones auxiliares (libres) de los tipos std::atomic

Especifidades del diseño de API concurrente

  • Diseño de estructuras con bloqueos: bloqueos gruesos y finos
  • Eficiencia del código concurrente: técnicas de estimación y medición
  • Particionamiento de datos
  • Escalabilidad de soluciones
  • Manejo de errores y situaciones excepcionales en la arquitectura de aplicaciones

Pruebas y depuración de aplicaciones concurrentes

  • Revisiones de código enfocadas en operaciones concurrentes
  • Especifidades de pruebas de aplicaciones concurrentes
  • Pruebas unitarias
  • Aumentar la probabilidad de fallas para pruebas
  • Métodos formales de pruebas de aplicaciones concurrentes
  • Patrones de arquitectura de aplicaciones concurrentes vs pruebas y depuración (visión general)

Gestión avanzada de hilos

  • Hilos dependientes (patrón Saga)
  • Evitar la contención en el acceso a datos
  • Detención y interrupción controlada de hilos
  • Interrupción de llamadas bloqueantes
  • Manejo de interrupciones
  • Robo de tareas
  • Interrupción de tareas durante el cierre de la aplicación

Patrones de diseño concurrentes

  • Tipos y propósito de los patrones concurrentes
  • Alcance de aplicación de los patrones
  • Pools de hilos (Thread Pool)
  • Patrón de objeto activo (Active Object)
  • Cola segura para hilos (Thread Safe Queue)
  • Patrón productor-consumidor (Producer Consumer)
  • Patrón de monitor (Monitor)
  • Seguridad concurrente de los patrones GoF

Requerimientos

  • Habilidad para utilizar herramientas de construcción de software en C++ en el entorno GNU/Linux y/o MS Windows
  • Conocimiento de los temas de programación en C++ (paradigma procedimental y orientado a objetos) a nivel avanzado e intermedio
  • Conocimiento de los temas de generación de código genérico (plantillas)

Número de participantes


Precio por participante

Reseñas (1)

Próximos cursos

Categorías Relacionadas