* Paralelismo: Ejecuta explícitamente múltiples instrucciones * simultáneamente * utilizando múltiples unidades de procesamiento (como múltiples núcleos en una CPU). Esto requiere recursos de hardware dedicados.
* concurrencia: Se ocupa de la ejecución de múltiples instrucciones que * se superponen * en el tiempo, pero no necesariamente en el mismo instante. Esto se puede lograr a través de varias técnicas, incluidas:
* Multitarea: Ejecutar múltiples programas aparentemente al mismo tiempo al cambiar rápidamente entre ellos. El procesamiento real sigue siendo secuencial, pero el cambio es lo suficientemente rápido como para dar la ilusión de concurrencia.
* múltiple: Un solo programa que ejecuta múltiples hilos de instrucciones simultáneamente. Estos hilos pueden compartir recursos, y un solo núcleo puede cambiar entre ellos rápidamente (conmutación de contexto).
* Paralelismo a nivel de instrucción (ILP): La CPU reorganiza y ejecuta múltiples instrucciones simultáneamente dentro de un solo núcleo, aprovechando el canalización y otras técnicas para mejorar el rendimiento. Esto sucede en un nivel mucho más bajo que la multitarea o la lectura múltiple.
* Simd (instrucción única, datos múltiples): Una sola instrucción funciona en múltiples puntos de datos simultáneamente, a menudo utilizados en el procesamiento vectorial y los cálculos de GPU.
En esencia, la concurrencia es un término más abarcador. El paralelismo es un * tipo * de concurrencia donde las instrucciones se ejecutan simultáneamente en unidades de hardware separadas. La concurrencia también se puede lograr sin un verdadero paralelismo, solo a través de la programación inteligente y la gestión de recursos. El objetivo de ambos es mejorar el rendimiento y el rendimiento general del sistema superponiendo o ejecutando simultáneamente diferentes partes de un programa o múltiples programas.