Clase 1: Introducción
Qué es la concurrencia?
Es la capacidad de ejecutar múltiples actividades en paralelo o simultáneamente. Permite a distintos objetos actuar al mismo tiempo. Factor relevante para el diseño de hardware, sistemas operativos, multiprocesadores, computación distribuida, programación y diseño.
No determinismo: no hay un orden preestablecido en la ejecución. Ejecuciones con la misma “entrada” pueden generar diferentes “salidas”.
La programación concurrente es necesaria para aplicaciones con una estructura más natural, mejoras en la respuesta y para ser usada en sistemas distribuidos.
Objetivo de los sistemas concurrentes:
- Ajustar el modelo de arquitectura de hardware y software al problema del mundo real a resolver.
- Incrementar la performance, mejorando los tiempos de respuesta de los sistemas de cómputo, a través de un enfoque diferente de la arquitectura física y lógica de las soluciones.
Ventajas:
- Velocidad de ejecución que se puede alcanzar.
- Mejor utilización de la CPU de cada procesador.
- Explotación de la concurrencia inherente a la mayoría de los problemas reales.
Soluciones paralelas
Consecuencias:
- Menor tiempo para completar el trabajo.
- Menor esfuerzo individual.
- Paralelismo del hardware.
Dificultades:
- Distribución de la carga de trabajo (diferente tamaño o tiempo de fabricación de cada parte, diferentes especializaciones de cada máquina y/o especialidades).
- Necesidad de compartir recursos evitando conflictos.