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 concurrencia
- Limitaciones de hardware en plataformas: hilos de hardware, tuberías, coherencia de caché
- Conceptos básicos relacionados con la programación multiproceso (correctitud del programa multiproceso, vivacidad, inanición, deadlock, carrera de datos, atomicidad, modelos de coherencia, taxonomía de Flynn)
- Mecanismos disponibles en C++ para implementar multiprocessing y multithreading
- Implementación de la biblioteca estándar: elementos desde C++14 hasta la actualidad (C++2a)
- Implementación disponible en Boost: diferencias con respecto a la biblioteca estándar
Procesos e hilos
- Aplicaciones multiproceso frente a multiproceso
- Sistema operativo e hilos (breve revisión de las implementaciones disponibles)
- Mecanismos de sincronización de procesos e hilos
- Implementación estructural de la sincronización
- Específico de la implementación de multithreading en el enfoque orientado a objetos (papel del patrón RAII)
Modelo de memoria en C++
- Objetos y ubicaciones en memoria
- Secuenciación y fuerza operativa
- 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 el estándar C++14 y posteriores
- Clase std::thread y ejecución de hilos
- Identificación de hilos
- Anclar y desanclar hilos
- Hilos y contenedores estándar
- Gestión de excepciones en hilos C++14
Mutua exclusión y secciones críticas
- Reglas básicas de mutua exclusión
- 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)
- Poseía 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 en semáforos
- Bloqueos recursivos
- Bloqueos con definición de nivel de bloqueo
- Variables de decisión y cooperación con bloqueo
- Implementación de barreras activas y pasivas (ang. Idle Waits, Busy Waits)
- Reanudación de la ejecución del hilo
- Comunicación entre hilos (modelo de Actores y CSP)
Tareas asíncronas
- Eventos asíncronos y su manejo
- 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
Específico del diseño de APIs multiproceso
- Diseño de estructuras con bloqueos: bloqueos finos y gruesos
- Rendimiento del código concurrente: técnicas de estimación y medición
- Partición de datos
- Escalabilidad de soluciones
- Gestión de errores y situaciones excepcionales en la arquitectura de la aplicación
Pruebas y depuración de aplicaciones multiproceso
- Revisión de código para operaciones multiproceso
- Específico de las pruebas de aplicaciones multiproceso
- Pruebas unitarias
- Aumentar la probabilidad de situaciones críticas para las pruebas
- Métodos formales de pruebas de aplicaciones multiproceso
- Patrones de arquitectura de aplicaciones multiproceso y pruebas y depuración (revisión)
Gestión avanzada de hilos
- Hilos dependientes (patrón Saga)
- Evitar la competencia en el acceso a los datos
- Detención controlada y interrupción del hilo
- Interrupción de llamadas bloqueantes
- Gestión de interrupciones
- Sustraer tareas
- Interrumpir tareas al finalizar la aplicación
Patrones de diseño para multiproceso
- Tipos y propósitos de los patrones multiproceso
- Alcance de la aplicación de los patrones
- Pool de hilos (ang. Thread Pool)
- Patrón de objeto activo (ang. Active Object)
- Cola segura multiproceso (ang. Thread Safe Queue)
- Patrón productor-consumidor (ang. Producer Consumer)
- Patrón monitor (ang. Monitor)
- Seguridad multiproceso de los patrones GoF
Requerimientos
- Habilidad para usar herramientas de compilación de software en C++ en entornos GNU/Linux y/o MS Windows
- Conocimiento de temas de programación en C++ (paradigma procedural y orientado a objetos) a nivel avanzado e intermedio-avanzado
- Conocimiento de 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