3 - Modelos fundamentales de concurrencia

Los modelos de concurrencia ofrecen formas distintas de organizar y coordinar tareas. Cada modelo define reglas de comunicación, aislamiento y sincronización que afectan el rendimiento y la complejidad de los programas. Conocerlos ayuda a elegir la herramienta adecuada para cada problema y a anticipar riesgos como condiciones de carrera o bloqueos.

3. Modelos Fundamentales de Concurrencia

En esta sección revisamos los modelos más usados: hilos, procesos, eventos, actores y memoria compartida. También comparamos sus fortalezas y debilidades para orientar decisiones de diseño.

3.1 Modelo de hilos (thread-based)

Varios hilos comparten el mismo espacio de memoria dentro de un proceso. Permiten dividir trabajo y ejecutar partes en paralelo cuando el sistema dispone de múltiples núcleos. El acceso compartido facilita la comunicación, pero introduce riesgos de sincronización (bloqueos, condiciones de carrera). Es común usar primitivas como mutex, semáforos y locks de lectura/escritura.

3.2 Modelo basado en procesos

Cada proceso tiene su propio espacio de direcciones. El aislamiento mejora la seguridad y la estabilidad (un fallo no derriba a los demás), a costa de mayor consumo de memoria y comunicación más costosa. La cooperación se logra mediante IPC: tuberías, sockets o memoria compartida controlada.

3.3 Modelo basado en eventos

Un bucle de eventos central despacha tareas pequeñas (callbacks, promesas) a medida que llegan eventos externos o se completan operaciones de E/S. Es eficiente para cargas I/O-bound porque evita bloquear hilos esperando. Lenguajes y runtimes con E/S asíncrona lo usan extensivamente en servidores y frontends.

3.4 Modelo de paso de mensajes (Actor Model)

Los actores son unidades independientes que se comunican enviando mensajes asíncronos. No comparten memoria directamente; cada actor procesa su cola de mensajes de forma secuencial, lo que simplifica la razón sobre el estado interno y reduce la necesidad de locks. Es popular en sistemas distribuidos y de alta disponibilidad.

3.5 Modelo de memoria compartida

Varios hilos o procesos acceden a estructuras comunes en memoria. Permite gran velocidad cuando el acceso se diseña correctamente, pero exige sincronización fina para mantener la coherencia. Se usan mecanismos como exclusión mutua, variables atómicas y barreras de memoria.

3.6 Comparación entre los modelos

  • Facilidad de razonar: actores y eventos reducen el riesgo de condiciones de carrera al evitar memoria compartida directa; hilos y memoria compartida requieren más disciplina.
  • Rendimiento: hilos y memoria compartida ofrecen comunicación rápida, pero pueden sufrir contención; procesos y actores agregan costo de mensaje pero mejor aislamiento.
  • Aislamiento y resiliencia: procesos y actores aislan fallos; hilos dentro del mismo proceso pueden propagarlos.
  • Escalabilidad: eventos escalan bien para E/S masiva; hilos y procesos escalan para CPU-bound si se gestionan los costos de sincronización.
  • Complejidad de depuración: menos compartición simplifica el debugging (actores, eventos); acceso compartido no controlado lo complica (hilos, memoria compartida).

No existe un modelo universal; muchos sistemas combinan varios: hilos para trabajo pesado, eventos para E/S, procesos para aislar fallos y actores para coordinar servicios distribuidos.