Gracias por enviar su consulta! Uno de los miembros de nuestro equipo se pondrá en contacto con usted en breve.
Gracias por enviar su reserva! Uno de los miembros de nuestro equipo se pondrá en contacto con usted en breve.
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)
Reseñas (1)
Ejemplos prácticos
Jan Kaniuka - SIEC BADAWCZA LUKASIEWICZ - PRZEMYSLOWY INSTYTUT AUTOMATYKI I POMIAROW PIAP
Curso - Programowanie wielowątkowe w języku C++
Traducción Automática