Programación Concurrente y Paralelismo. ¿Qué son?
En el mundo de la programación, la eficiencia y el rendimiento son esenciales para el desarrollo de aplicaciones modernas. Dos conceptos clave que permiten a los desarrolladores optimizar el uso de los recursos del sistema son la concurrencia y el paralelismo. Estos enfoques no solo mejoran la capacidad de un programa para manejar múltiples tareas, sino que también reducen los tiempos de espera y maximizan el uso de la CPU.
En este artículo, exploraremos qué son la concurrencia y el paralelismo, cómo funcionan, y cuándo es más efectivo utilizarlos para llevar tus aplicaciones al siguiente nivel.
La concurrencia se refiere a la capacidad que tiene un programa para manejar múltiples tareas al mismo tiempo, pero que no necesariamente se ejecutan exactamente al mismo tiempo. Más bien, se refiere a que las tareas pueden avanzar de manera intercalada, con el programa cambiando rápidamente entre ellas. Esto es útil cuando las tareas son independientes entre sí, lo que permite que el sistema realice avances en una tarea mientras espera que otras completen ciertas operaciones. Por ejemplo, esperar una respuesta de la base de datos o una llamada a una API.
La concurrencia permite que las tareas se inicien en paralelo, aprovechando tiempos de espera (como la latencia de red o el tiempo de acceso a la base de datos) para realizar otras tareas. Aunque las tareas no se ejecuten todas exactamente al mismo tiempo (como lo haría en un sistema verdaderamente paralelo), la concurrencia permite aprovechar al máximo el tiempo disponible y mejorar la eficiencia.
Ejemplo de Concurrencia en la Cocina
Imagina que estás en la cocina preparando una receta que requiere papas, pollo, cebolla y ajo. Primero, pones las papas a hervir, lo cual tomará un tiempo. Mientras las papas se cocinan, necesitas condimentar el pollo y picar la cebolla y el ajo.
En un enfoque de programación secuencial (es decir, no concurrente), seguirías este orden estrictamente. Primero, esperarías a que las papas se cocinen por completo antes de comenzar a condimentar el pollo. Luego, después de terminar con el pollo, empezarías a picar la cebolla y el ajo. Esto significa que pasarías mucho tiempo esperando innecesariamente, lo que resulta en un proceso más largo.
Sin embargo, en un enfoque concurrente, mientras las papas se están cocinando, puedes aprovechar ese tiempo para condimentar el pollo y picar la cebolla y el ajo. De esta forma, estás realizando varias tareas en paralelo, maximizando tu eficiencia. Cuando las papas estén listas, el pollo ya estará condimentado y los ingredientes picados, lo que te permitirá continuar con la receta sin demoras.
Este es el beneficio de la programación concurrente: permite que diferentes tareas independientes se realicen simultáneamente, optimizando el uso del tiempo y los recursos.
Paralelismo
El paralelismo, por otro lado, va un paso más allá. Se refiere a la capacidad de ejecutar múltiples tareas exactamente al mismo tiempo. Esto es posible en sistemas con múltiples núcleos de procesamiento, donde cada tarea puede ser asignada a un núcleo diferente, permitiendo que todas se ejecuten simultáneamente.
Una CPU puede tener varios núcleos, y cada núcleo puede ejecutar hilos de forma independiente. Esto permite distribuir diferentes tareas en esos hilos, aprovechando los núcleos para realizar múltiples tareas en paralelo, lo que se conoce como paralelismo.
Ejemplo de Paralelismo en la Cocina:
Siguiendo con el ejemplo de la cocina, imagina que ahora tienes a varios cocineros trabajando contigo. Mientras uno se encarga de hervir las papas, otro está condimentando el pollo, y un tercero está picando la cebolla y el ajo. Aquí, las tareas se realizan literalmente al mismo tiempo, sin necesidad de esperar o intercalarlas. Esto es un ejemplo de paralelismo, donde varias tareas se ejecutan simultáneamente, aprovechando recursos adicionales (en este caso, los otros cocineros).
Comparación:
- Concurrencia es como si un solo cocinero intentara hacer todas las tareas, alternando entre ellas para aprovechar al máximo el tiempo.
- Paralelismo es como tener múltiples cocineros trabajando en diferentes tareas al mismo tiempo, sin necesidad de alternar.
Ambos conceptos mejoran la eficiencia en la ejecución de tareas, pero el paralelismo lo lleva un paso más allá al realizar verdaderamente varias tareas al mismo tiempo.
Si te ha gustado este tipo de contenido te invito a que me sigas, continuaré subiendo más árticulos del estilo.