1. Inicio
  2. Diferencias
  3. Concurrencia y paralelismo

Diferencia entre concurrencia y paralelismo

Tema: tecnología.

La concurrencia es la capacidad de un programa para gestionar varias tareas a la vez, intercalando su ejecución aunque sea en un solo núcleo; el paralelismo es ejecutar varias tareas de manera literalmente simultánea, en núcleos o procesadores distintos.

Para recordarlo: la concurrencia es una forma de organizar el trabajo; el paralelismo es una forma de ejecutarlo. Se puede programar de forma concurrente sin que haya paralelismo real detrás.

Tabla comparativa: concurrencia y paralelismo

ConcurrenciaParalelismo
Qué esGestionar varias tareas a la vez, intercalando su avance.Ejecutar varias tareas al mismo instante físico.
Requiere varios núcleosNo, puede lograrse en un único núcleo.Sí, necesita al menos dos núcleos o procesadores.
NivelEs una forma de diseñar y organizar el programa.Es una forma de ejecutar ese programa en el hardware.
AnalogíaUna persona que atiende varias llamadas alternando entre ellas.Varias personas, cada una atendiendo su propia llamada al mismo tiempo.
EjemploUn servidor que atiende cientos de peticiones alternando su procesamiento.Un programa de vídeo que reparte cada fotograma entre los núcleos del procesador.

Qué es la concurrencia

La concurrencia describe la capacidad de un sistema para avanzar en varias tareas dentro de un mismo periodo de tiempo, sin que eso implique que se ejecuten en el mismo instante exacto. En un ordenador con un solo núcleo, esto se consigue repartiendo el tiempo del procesador entre las distintas tareas en fragmentos muy breves, cambiando de una a otra tan rápido que, desde fuera, parece que todas avanzan a la vez.

El objetivo de diseñar un programa de forma concurrente no es necesariamente acelerarlo, sino estructurarlo para que pueda ocuparse de varias cosas sin bloquearse esperando a que termine una sola, como un servidor que sigue aceptando nuevas conexiones mientras atiende las que ya tiene abiertas.

Qué es el paralelismo

El paralelismo consiste en ejecutar de verdad varias tareas al mismo tiempo, cada una en su propio núcleo de procesador, en su propio procesador o incluso en máquinas distintas. A diferencia de la concurrencia, aquí no hay ningún intercalado: las tareas avanzan literalmente en paralelo, en el mismo instante.

El objetivo habitual del paralelismo es reducir el tiempo total de un cálculo, al repartir el trabajo entre varias unidades de procesamiento que trabajan de forma simultánea, como dividir el renderizado de una imagen en franjas que cada núcleo procesa por separado.

Ejemplos que muestran la diferencia

Un servidor con un único núcleo atiende con concurrencia cientos de peticiones web, alternando entre ellas tan rápido que ningún usuario nota la espera.

Un programa de edición de vídeo usa paralelismo cuando reparte el procesamiento de distintos fotogramas entre los varios núcleos del procesador, reduciendo el tiempo total de exportación.

Un sistema puede ser concurrente y paralelo a la vez: gestiona muchas tareas de forma organizada y, además, cuenta con varios núcleos que las ejecutan de verdad al mismo tiempo.

Cuándo usar cada término

Preguntas frecuentes

¿Puede haber concurrencia sin paralelismo?

Sí. Un programa puede gestionar varias tareas de forma concurrente en un único núcleo, alternando entre ellas, sin que exista ninguna ejecución simultánea real.

¿Puede haber paralelismo sin concurrencia?

En cierto sentido sí, cuando se repite exactamente el mismo cálculo simple sobre datos distintos en varios núcleos a la vez, sin que las tareas necesiten coordinarse entre sí ni compartir información durante la ejecución.

¿Necesito varios núcleos para programar de forma concurrente?

No. La concurrencia es un enfoque de diseño del programa, y funciona incluso en un procesador con un solo núcleo, aunque tener varios núcleos permite que parte de esa concurrencia se convierta también en paralelismo real.

Ver también