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 de la plataforma - hilos de hardware, pipelines, coherencia de la caché
- Conceptos fundamentales relacionados con la programación multiproceso (corrección del programa multiproceso, vivacidad, inanición, bloqueo, carrera, atomicidad, modelos de coherencia, taxonomía de Flynn)
- Disponibles en C++ mecanismos de implementación de multiproceso y multiproceso
- 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 reseña de las implementaciones disponibles)
- Mecanismos de sincronización de procesos e hilos
- Implementación estructural de la sincronización
- Específicos de la implementación multiproceso en el 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 imposición
- Relaciones: de sincronización, precedencia, ordenamiento de operaciones en favor de las operaciones 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 del hilo
- Unión y separación del hilo
- Hilos y contenedores estándar
- Manejo de excepciones en hilos C++14
Exclusión mutua y secciones críticas
- Principios simples de exclusión mutua
- Conceptos (tipos) de objetos de bloqueo disponibles
- Rápida introducción al manejo del tiempo en C++14 (biblioteca chrono)
- Clases std::mutex, std::timed_mutex, std::shared_mutex y 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 (std::thread_local)
Bloqueos y sincronización de hilos
- Operaciones en semáforos
- Bloqueos recursivos
- Bloqueos con definición del nivel de bloqueo
- Variables de decisión y cooperación con el bloqueo
- Implementación de barreras activas y pasivas (Idle Waits, Busy Waits)
- Reanudación de la ejecución de los hilos
- Comunicación entre hilos (modelo de Actor y CSP)
Tareas asíncronas
- Eventos asíncronos y su manejo
- Futuros (future)
- Promesas (promise)
- Tareas preparadas (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 de utilidad (libres) de los tipos std::atomic
Específico del diseño de API multiproceso
- Diseño de estructuras usando bloqueos - bloqueos gruesos y finos
- Rendimiento del código concurrente - técnicas de estimación y medición
- Particionamiento de datos
- Escalabilidad de las soluciones
- Manejo de errores y situaciones excepcionales en la arquitectura de la aplicación
Pruebas y depuración de aplicaciones multiproceso
- Revisiones de código para operaciones multiproceso
- Específico de las pruebas de aplicaciones multiproceso
- Pruebas unitarias
- Aumento de la probabilidad de situaciones de falla para las pruebas
- Métodos formales de prueba de aplicaciones multiproceso
- Patrones de arquitectura de aplicaciones multiproceso frente a pruebas y depuración (reseña)
Gestión avanzada de hilos
- Hilos dependientes (patrón Saga)
- Evitar la competencia en el acceso a datos
- Parada controlada e interrupción del hilo
- 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 multiproceso
- Tipos y propósitos de los patrones multiproceso
- Alcance de aplicación de los patrones
- Pool de Hilos (Thread Pool)
- Patrón de Objeto Activo (Active Object)
- Cola Segura Multiproceso (Thread Safe Queue)
- Patrón Productor-Consumidor (Producer Consumer)
- Patrón Monitor (Monitor)
- Seguridad multiproceso de los patrones GoF
Requerimientos
- Habilidad para utilizar herramientas de construcción de software en C++ en entornos GNU/Linux y/o MS Windows
- Conocimiento de los conceptos de programación en C++ (paradigma procedural y orientado a objetos) a nivel avanzado e intermedio
- Conocimiento de temas relacionados con la creació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