Cómo implementar la concurrencia
El propio hardware
multiprocesadores (máqs. de memoria compartida)
sistemas distribuidos
Multiprogramación
No hay paralelismo. Los procesos se reparten el procesador: entrelazado (interleaving)
¿Quién planifica los procesos?
el sistema operativo
el propio ejecutable (gracias al compilador) -> runtime scheduler (RTSS)
Planificadores
Nuestro programa se ejecutará de manera diferente según la política de planificación empleada.
Algunos programas funcionarán adecuadamente con un planificador, pero con otros pueden fracasar.
Granularidad del paralelismo
¿cuáles son las acciones que se pueden ejecutar en paralelo?
instrucciones de máquina
sentencias de un lenguaje de programación
objetos concurrentes dentro de un programa
programas ejecutables completos
Grano fino –> grano grueso
Cada grano propicia unas herramientas y técnicas de programación diferentes
La abstracción de la programación concurrente
Abstracción de la concurrencia
Nuestro programa expresa acciones concurrentes (procesos o hilos), pero éstas no tienen por qué ejecutarse en paralelo.
Cada proceso concurrente se ejecuta sobre un procesador virtual.
El compilador y el s.o. serán responsables de ejecutar nuestros procesos como consideren más oportuno.
Procesadores virtuales
Supondremos que nuestro programa concurrente consiste en un conjunto de procesos secuenciales que se ejecutan en paralelo, cada uno de ellos corriendo sobre un procesador virtual.
Nos deben dar igual las velocidades relativas de los procesadores virtuales.
Orden parcial -> no determinismo
La programación secuencial define un orden total de las instrucciones
Un programa concurrente define un orden parcial de ejecución
El orden parcial implica el no determinismo de los programas concurrentes
No determinismo
Un programa secuencial es determinista:
si se le presenta el mismo conjunto de datos de entrada, siempre producirá la misma salida.
Un programa concurrente es no determinista:
un mismo conjunto de datos de entrada puede producir diferentes datos de salida, según el orden de ejecución de los procesos.
Página siguiente |