
1. Problema de la sección crítica
1.1. Definición
1.1.1. Región del código donde múltiples procesos acceden a recursos compartidos.
1.2. Problemas
1.2.1. Accesos simultáneos generan resultados inconsistentes.
1.3. Soluciones
1.3.1. -Mutex: Bloqueos para garantizar acceso exclusivo. -Semáforos: Variables de control para gestionar acceso concurrente. -Monitores: Estructuras que encapsulan datos compartidos y métodos sincronizados.
2. Conceptos
2.1. Programacion concurrente: Técnica de programación donde múltiples tareas se ejecutan de manera simultánea o en paralelo.
2.2. Programación Secuencial: Técnica de programación donde las instrucciones se ejecutan una tras otra en un único hilo de ejecución.
3. Problemas asociados
3.1. Programación secuencial
3.1.1. Bloqueo: Una tarea debe esperar a que otra finalice. Ineficiencia: Uso subóptimo de recursos.
3.2. Programación concurrente
3.2.1. Interbloqueo: Dos o más procesos esperan recursos entre sí indefinidamente. Starvation: Un proceso no obtiene recursos necesarios porque otros acaparan los recursos.
4. Ventajas
4.1. -Eficiencia por mejor uso de CPU y otros recursos del sistema -Escalabilidad -Rapidez Modularidad para dividir tareas complejas en subtareas concurrentes.
5. Desventajas
5.1. -Difícil de implementar y depurar debido a problemas de sincronización. -Requiere más memoria y potencia de CPU para gestionar hilos/procesos. -Presenta errores difíciles de detectar
6. Arquitectura Utilizada
6.1. -Modelos de programacion concurrente
6.1.1. Hilos, eventos y callbacks, memoria compartida, pipelines
6.2. Hardware
6.2.1. Sistemas multiprocesador y multinúcleo,clústeres, AWS o Azure, GPUs, TPUs y sistemas embebidos como Arduino o ESP32.
6.3. Entornos
6.3.1. Sistemas operativos, lenguajes y librerías, frameworks como Akka o Hadoop.