Ponte en Contacto
 Duración 28 horas

Temario del curso

Desafíos y problemas de concurrencia

  • Limitaciones de hardware en plataformas: hilos de hardware, tuberías (pipes), coherencia de caché
  • Conceptos elementales relacionados con la programación multiproceso (correción de programas multiproceso, livelock, deadlock, interbloqueo, race condition, atomicidad, modelos de consistencia, taxonomía de Flynn)
  • Mecanismos disponibles en C++ para implementar el multiproceso y multiprocessing
  • Implementación de la biblioteca estándar: elementos desde C++14 hasta la actualidad (C++2a)
  • Implementación disponible en Boost - diferencias respecto a la biblioteca estándar

Procesos e hilos

  • Aplicaciones multiproceso frente a aplicaciones multiproceso basadas en hilos
  • Sistema operativo e hilos (visión general breve de las implementaciones disponibles)
  • Mecanismos de sincronización de procesos e hilos
  • Implementación estructural de la sincronización
  • Especificidades de la implementación multiproceso en el enfoque orientado a objetos (papel del patrón RAII)

Modelo de memoria en C++

  • Objetos y ubicaciones de memoria
  • Programación de operaciones y su imposición
  • Relaciones: de sincronización, precedencia, ordenamiento de operaciones para acciones atómicas, secuencias de liberación
  • Barreras de memoria
  • Operaciones atómicas

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

  • Clase std::thread y ejecución de hilos
  • Identificación del hilo
  • Unión y separación (detach) de hilos
  • Hilos y contenedores estándar
  • Gestión de excepciones en hilos con C++14

Exclusión mutua y secciones críticas

  • Principios básicos de la exclusión mutua
  • Conceptos (tipos) de objetos bloqueantes disponibles
  • Rápida introducción 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 copropiedad de bloqueos e hilos
  • Problema lectores-escritores
  • Inicialización única
  • Memoria local (privada) del hilo (ang. std::thread_local)

Bloqueos y sincronización de hilos

  • Operaciones con semáforos
  • Bloqueos recursivos
  • Bloqueos definidos por el nivel de bloqueo
  • Variables de decisión e interacción con bloqueos
  • Implementación de barreras activas y pasivas (ang. Idle Waits, Busy Waits)
  • Reanudación de la ejecución de los hilos
  • Comunicación entre hilos (modelo Actor y CSP)

Tareas asíncronas

  • Eventos asíncronos y su gestión
  • Futuros (ang. future)
  • Promesas (ang. promise)
  • Tareas preparadas (ang. packaged_task)

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

Especificidades del diseño de API multiproceso

  • Diseño de estructuras usando bloqueos: bloqueos de grano grueso y fino
  • Rendimiento del código concurrente: técnicas de estimación y medición
  • Particionamiento de datos
  • Escalabilidad de las soluciones
  • Gestión de errores y situaciones excepcionales en la arquitectura de la aplicación

Pruebas y depuración de aplicaciones multiproceso

  • Revisiones de código enfocadas en operaciones multiproceso
  • Especificidades de las pruebas de aplicaciones multiproceso
  • Pruebas unitarias
  • Aumento de la probabilidad de situaciones de error para facilitar las pruebas
  • Métodos formales de prueba de aplicaciones multiproceso
  • Patrones de arquitectura de aplicaciones multiproceso frente a pruebas y depuración (visión general)

Gestión avanzada de hilos

  • Hilos dependientes (patrón Saga)
  • Evitación de la contención en el acceso a datos
  • Detención controlada e interrupción del hilo
  • Interrupción de llamadas bloqueantes
  • Gestión de interrupciones
  • Hurto de tareas
  • Interrupción de tareas durante el cierre de la aplicación

Patrones de diseño multiproceso

  • Tipos y propósito de los patrones multiproceso
  • Ámbito de aplicación de los patrones
  • Pool de hilos (ang. Thread Pool)
  • Patrón Active Object
  • Cola segura para multiproceso (ang. Thread Safe Queue)
  • Patrón productor-consumidor (ang. Producer Consumer)
  • Patrón Monitor
  • Seguridad multiproceso en los patrones GoF

Requerimientos

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

Número de participantes


Precio por participante

Reseñas (1)

Próximos cursos

Categorías Relacionadas