5.63.4.3 Computación Paralela y Distribuida (8 horas) [Habilidades AG-C09,AG-C11]

Referencias Bibliográficas: [Marinescu, 2022]

Temas

  1. Seguridad (safety) y vivacidad (liveness):
    1. Condiciones de carrera (race conditions)
    2. Dependencias/precondiciones
    3. Modelos de fallos (fault models)
    4. Terminación
  2. Modelos de programación:
    1. Modelo de actores (actor models)
    2. Modelos procedurales y reactivos
    3. Modelos de programación síncrona/asíncrona
    4. Paralelismo de datos (data parallelism)
  3. Propiedades:
    1. Propiedades basadas en orden:
      1. Conmutatividad
      2. Independencia
    2. Propiedades basadas en consistencia:
      1. Atomicidad
      2. Consenso
  4. Control de ejecución:
    1. Espera asíncrona Async await
    2. Promesas (promises)
    3. Hilos (threads)
  5. Comunicación y coordinación:
    1. Mutexes
    2. Paso de mensajes (message-passing)
    3. Memoria compartida (shared memory)
    4. Cobegin-coend
    5. Monitores
    6. Canales (channels)
    7. Hilos (threads)
    8. Guardas (guards)
  6. Futuros (futures)
  7. Soporte del lenguaje para paralelismo de datos como forall, desenrollado de bucles (loop unrolling), map/reduce
  8. Efecto de los modelos de consistencia de memoria en la semántica del lenguaje y la generación correcta de código
  9. Interfaces de Programación de Aplicaciones de Transferencia de Estado Representacional (REST APIs)
  10. Tecnologías y enfoques: computación en la nube (cloud computing), computación de alto rendimiento, computación cuántica, computación ubicua
  11. Sobrecarga del paso de mensajes
  12. Granularidad del programa para una explotación eficiente de la concurrencia
  13. Concurrencia y otros paradigmas de programación (por ejemplo, funcional)

Aprendizaje esperado (Learning Outcomes)

  1. Explicar por qué los lenguajes de programación no garantizan la consistencia secuencial en presencia de condiciones de carrera (data races) y qué deben hacer los programadores como resultado [Explicar]
  2. Implementar programas concurrentes correctos usando múltiples modelos de programación, como memoria compartida, actores, futuros, construcciones de sincronización y primitivas de paralelismo de datos [Implementar]
  3. Usar un modelo de paso de mensajes para analizar un protocolo de comunicación [Usar]
  4. Usar construcciones de sincronización como métodos monitorizados/sincronizados en un programa simple [Usar]
  5. Modelar dependencia de datos usando construcciones de programación simples que involucran variables, lectura y escritura [Implementar]
  6. Modelar dependencia de control usando construcciones simples como selección e iteración [Implementar]
  7. Explicar cómo las APIs REST integran aplicaciones y automatizan procesos [Explicar]
  8. Explicar beneficios, limitaciones y desafíos relacionados con la computación distribuida y paralela [Explicar]

Generado por Ernesto Cuadros-Vargas , Sociedad Peruana de Computación-Peru, basado en el modelo de la Computing Curricula de IEEE-CS/ACM