La concurrencia es la capacidad del CPU para procesar más de un proceso al mismo tiempo,en la concurrencia, los procesos en ejecución no tienen porqué estar relacionados, es decir, cualquiera puede iniciar y terminar en el momento que sea, y el resultado de uno no afecta al otro.
Ventajas de la concurrencia
-
Permite optimizar el uso de recursos en sistemas mono/multiprocesador.
-
Fiable administración de los datos en sistemas con gran información
-
Mejor aprovechamiento de la CPU
Desventajas de la concurrencia
-
Dificultad de verificación.
-
En programas con pocas instrucciones en mas lento
-
Si se aplica mal puede llevar a resultados erróneos.
Paralelismo
El paralelismo sigue la filosofía de “divide y vencerás”, ya que consiste en tomar un único problema, y mediante concurrencia llegar a una solución más rápido. El paralelismo lo que hace es tomar el problema inicial, dividir el problema en fracciones más pequeñas, y luego cada fracción es procesada de forma concurrente, aprovechando al máximo la capacidad del procesador para resolver el problema.
La principal diferencia del paralelismo contra la concurrencia es que, en el paralelismo, todos los procesos concurrentes están íntimamente relacionados a resolver el mismo problema, de tal forma que el resultado de los demás procesos afecta al resultado final.
Ventajas del paralelismo
-
Resuelve problemas que no se podrían realizar en una sola CPU
-
Resuelve problemas que no se pueden resolver en un tiempo razonable
-
Permite ejecutar problemas de un orden y complejidad mayor
Desventajas del paralelismo
-
Mayor consumo de energía
-
Mayor dificultad a la hora de escribir programas
-
Dificultad para lograr una buena sincronización y comunicación entre las tareas
Concurrencia vs Paralelismo
Este puede llegar a ser uno de los puntos que más interés puede llegar a causar en los programadores y con justa razón, ya que son términos que pueden llegar a confundirse fácilmente, es por ello que es necesario aprender a diferenciarlos.
Concurrencia |
Paralelismo |
Soporta dos o más acciones en progreso |
Soporta dos o más acciones ejecutándose simultáneamente |
Procesos que se ejecutan de manera independiente |
Procesos que se ejecutan Simultáneamente (tal vez relacionados) |
Lidiar con muchas cosas al tiempo |
Hacer muchas cosas al tiempo |
Sobre la estructura |
Sobre la ejecución |
Referencias
Grande, R. C. (2020, 10 julio). Paralelismo y Concurrencia - Rubén Cougil Grande. Medium. https://medium.com/@rcougil/software-paralelismo-y-concurrencia-ae6018f68d75
¿Cuál es la diferencia entre concurrencia y paralelismo? DOKRY Desarrollo. (s. f.). Dokry. https://www.dokry.com/2208
Rauber, T., & Rünger, G. (2013). Parallel Programming: For Multicore and Cluster Systems (2nd 2013 ed.). Springer.