Los modelos de concurrencia nos ayudan a diseñar programas concurrentes, sin mucha complejidad adicional

Estado Mutable Compartido

Consiste en serializar el acceso al estado compartido. Se utilizan estructuras conocidas como Locks para que ciertos procedimientos críticos se ejecuten de forma exclusiva.

Si se está ejecutando algún procedimiento crítico, entonces cualquier otro proceso que quiera ejecutarlo deberá esperar a que el lock sea liberado.

Paralelismo Fork-Join

Cuando los procesos no deben interactuar entre ellos, y el resultado final depende de la combinación de los resultados de aquellos procesos independientes, puedo utilizar el Modelo Fork-Join. Espero a que todos los hilos finalicen y combino los resultados.

Canales y Mensajes

Los hilos se comunican entre sí al enviar mensajes a través de canales. De esta forma, no se accede a memoria compartida, sino que sé comparte la memoria a través del envío de mensajes.

“Don’t communicate by sharing memory; share memory by communicating.” (R. Pike)

Actor

Existe un actor que recibe mensajes de distintos hilos a través de un canal y resuelve peticiones. El actor toma control de un recurso y se encarga de manejarlo.

Asincronismo

El Asincronismo busca realizar concurrencia colaborativa. Ejecuta tareas livianas en un entorno de ejecución que maximiza su eficiencia. Busca que el programa parezca secuencial, pero que se comporte de forma concurrente.