Para que puedas entender el concepto de concurrencia imagina que eres el chef de un restaurante italiano y realizas la preparación de una deliciosa pasta para tus clientes siguiendo estos pasos:
- Pones a calentar el agua y esperas hasta que esta hierva.
- Agregas la sal y la pasta, y esperas hasta que la pasta esté cocida.
- Retiras el agua de la pasta, luego cortas la cebolla y el tomate.
- Preparas un guiso y esperas hasta que esté listo.
- Haces la salsa de la pasta y esperas hasta que esté en su punto.
- Finalmente mezclas el guiso, la salsa y la pasta para servir tu plato.
Ya pudiste darte cuenta de que este proceso tiene un problema, siempre debes esperar a que finalice un paso para continuar con el siguiente ¿cómo podrías resolverlo?, una opción es contratar cocineros que te ayuden con la preparación de la pasta, así que el proceso ahora podría ser el siguiente:
En este nuevo escenario, cada cocinero realiza una parte de la preparación de la pasta al mismo tiempo, mientras tú coces la pasta, un cocinero está preparando el guiso y el otro haciendo la salsa, al final solo se mezclan las preparaciones de cada cocinero. Esto es el paralelismo, poder "hacer muchas cosas a la vez".
Aunque la opción anterior es más rápida, ¿Qué sucede si no tienes el dinero suficiente para contratar más cocineros?¿Cómo podrías mejorar el proceso?, lo podrías solucionar reestructurando el proceso, algo como:
Empiezas calentando el agua y mientras esta hierve, cortas la cebolla y el tomate, los agregas al sartén para preparar el guiso, mientras se cocina el guiso alistas los ingredientes para preparar la salsa y la pones a cocinar, en este punto el agua ya hirvió así que agregas la sal, la pasta y la pones a cocinar, mientras tanto el guiso y la salsa ya están listas, así que las mezclas, en ese momento la pasta ya debe estar cocida, por lo que le retiras el agua y finalmente la mezclas a la salsa y el guiso.
En este escenario, solo estás tú realizando la preparación de la pasta, pero ya no esperas a que finalice un paso para continuar con el siguiente, ahora dejas en preparación un paso y vas trabajando en otro. Esto es la concurrencia,"lidiar con muchas cosas a la vez".
Así como el chef debía tener recursos económicos para pagar más cocineros, de la misma manera sucede en el código que escribimos cuando trabajamos con paralelismo, tu máquina debe tener más recursos "procesadores" para que puedas ejecutar varias tareas de tu programa al mismo tiempo. Por el contrario, si trabajas con un lenguaje que soporte concurrencia debes estructurar tu programa para que este pueda lidiar con varias tareas a la vez y no de manera secuencial.
Go es un lenguaje de programación concurrente y compilado inspirado en la sintaxis de C. Si quieres aprender concurrencia este es el curso que necesitas ed.team/cursos/go. La primera clase es completamente GRATIS 🎁. No tienes nada que perder, ¡míralo!