Programacion concurrente
Diseño basado en varias actividades independientes
Conceptualmente se ejecutan en paralelo, en un nodo, multiplexa el tiempo de procesador entre las tareas. En un sistemadistribuido, paralelismo real las actividades deben cooperar entre sí
– Comunicación
– Sincronización
Actividades = procesos o threads (hilos)
Utilidad de la programación Concurrente
Mejora lascaracterísticas de:
– Flexibilidad – Interactividad – Eficiencia
Facilita el diseño de sistemas
– Reactivos (responden a estímulos externos)
– Con actividades lógicamente separadas ydistintos niveles
de prioridad
– Con actividades periódicas
– Ej.- atención a varios clientes, timeouts, etc.
Dificultades a resolver
Puede darse cualquier intercalado de
Ejecución, los programas debenser correctos bajo cualquier intercalado posible
– Ejemplo.- acceso a cuenta bancaria
Posibles interferencias entre tareas
– Resultado incorrecto bajo ciertos intercalados (no determinismo)Vivacidad, interbloqueos
Proceso
Abstracción proporcionada por el SO (ej Unix)
– El SO planifica y ejecuta varios procesos
Algoritmo de planificación
– Cooperativo (cada proceso se autolimita)
–Expulsivo (el sistema limita el tiempo dedicado a cada proceso)
– Cada proceso mantiene su propio estado
Pila
Áreas de datos
Ficheros abiertos, etc.
– Existe una jerarquía de objetos (relaciónpadre-hijo)
Padre e hijo comparten información
– Ficheros abiertos
– Pipes y streams
– Sockets
Pueden comunicarse/sincronizarse
Thread (Thread=hilo=proceso ligero)
Hilos = Actividades concurrentesdentro de un proceso comparten el contexto del proceso padre
– Variables compartidas
– Ficheros abiertos, etc.
Pero cada hilo mantiene una parte local
– Pila local
– Variables locales, etcCreación/destrucción/comunicación/cambio estado mucho más eficiente que con procesos
La memoria compartida facilita la comunicación y sincronización
– Pero aparecen posibles interferencias
Nos centramos...
Regístrate para leer el documento completo.