Seminario de Programación Concurrente
Prof. Luis Mateu B.
Requisitos: CC41B
Créditos: 10 UD
Objetivos
El alumno aprenderá a:
- escribir programas en Java que usan múltiples threads.
- evitar los clásicos errores de la programación concurrente.
- reutilizar patrones de programación concurrente.
- distinguir las distintas arquitecturas de hardware de
multiprocesadores.
Programa
- Programación concurrente en Java: creación y término de threads,
sincronización por medio de monitores.
- Propiedades de la programación concurrente: safety, liveness,
errores de programación (data-races y deadlocks).
- Patrones de concurrencia: futuros, productor/consumidor,
lectores/escritores, guardias, fork/join, cliente/servidor.
- Estrategias para lograr robustez: inmutabilidad, sincronización completa
y confinamiento.
- Modelos de consistencia de memoria: consistencia secuencial y relajada,
barreras de memoria.
- Lenguajes y herramientas de alto nivel para la programación
concurrente: regiones críticas, monitores de Hoare, Occam, RccJava,
Guava, JShield, Eraser.
- Arquitectura de hardware de multiprocesadores: memoria compartida,
protocolos para la coherencia de la memoria cache, clusters de
procesadores, memoria distribuida, máquinas con acceso a memoria
no uniforme (NUMA).
- Objetos distribuidos: invocación de métodos remotos en Java, Corba.
- Implementación de objetos distribuidos: referencias remotas, stubs,
esqueletos, recolección de basuras distribuida.
Evaluación:
- 2 controles y un examen (70%)
- 3 o 4 tareas (40%)
Bibliografía:
- Doug Lea, Concurrent Programming in Java, Design Principles and Patterns,
Addison Wesley, 1997.
- Tutorial de Java, Sun Microsystems,
http://java.sun.com/docs/books/tutorial/index.html.
- Papers seleccionados.