El paralelismo implica concurrencia pero no al revés ¿verdad?

14

A menudo leo que el paralelismo y la concurrencia son cosas diferentes. Muy a menudo los que contestan / comentan van tan lejos como para escribir que son dos cosas completamente diferentes. Sin embargo, en mi opinión, están relacionados, pero me gustaría una aclaración al respecto.

Por ejemplo, si estoy en una CPU de varios núcleos y logro dividir el cálculo en x un cálculo más pequeño (por ejemplo, usando fork / join) cada uno ejecutándose en su propio hilo, tendré un programa que realiza cálculos paralelos (porque supuestamente en algún momento varios subprocesos se ejecutarán en varios núcleos) y son concurrentes, ¿no?

Aunque si simplemente estoy usando, digamos, Java y lidiando con eventos de IU y repintados en el Subproceso de Despacho de Eventos más ejecutando el único subproceso que yo mismo creé, tendré un programa que es concurrente (Hilo EDT + GC + Mi hilo principal, etc.) pero no paralelo.

Me gustaría saber si estoy haciendo esto correctamente y si el paralelismo (en un sistema "único pero de múltiples núcleos") siempre implica concurrencia o no.

También, ¿se ejecutan los programas de subprocesos múltiples en la CPU de varios núcleos pero donde los diferentes subprocesos están haciendo un cálculo totalmente diferente, se considera que están usando "paralelismo"?

    
pregunta Cedric Martin 01.07.2012 - 13:40

3 respuestas

13

Según Wikipedia :

  

La computación paralela es una forma de cálculo en la que se realizan muchos cálculos simultáneamente, y se basa en el principio de que los problemas grandes a menudo se pueden dividir en otros más pequeños, que luego se resuelven simultáneamente ("en paralelo").

Es decir, el paralelismo siempre implica concurrencia.

  

También, ¿se ejecutan los programas de subprocesos múltiples en la CPU de varios núcleos pero donde los diferentes subprocesos están haciendo un cálculo totalmente diferente, se considera que están usando "paralelismo"?

No. La esencia del paralelismo es que un gran problema se divide en otros más pequeños para que las piezas más pequeñas se puedan resolver al mismo tiempo. Las piezas son mutuamente independientes (al menos hasta cierto punto), pero siguen siendo parte del problema mayor, que ahora se está resolviendo en paralelo.

La esencia de la concurrencia es que una cantidad de subprocesos (o procesos o computadoras) están haciendo algo simultáneamente , posiblemente (pero no necesariamente) interactuando de alguna manera. Wikipedia de nuevo :

  

La concurrencia es una propiedad de los sistemas en la que varios cálculos se ejecutan simultáneamente y potencialmente interactúan entre sí.

    
respondido por el Joonas Pulakka 01.07.2012 - 14:05
3

El código puede ser concurrente, pero no paralelo.

Imagine múltiples subprocesos ejecutándose en una máquina de un solo núcleo. Esta máquina de núcleo único solo procesará un hilo en el momento, por lo que no habrá paralelismo de operaciones. Pero para cada subproceso, gracias a cómo el sistema operativo maneja varios subprocesos, entonces cada subproceso debe asumir que todos los demás subprocesos se ejecutan al mismo tiempo.

    
respondido por el Euphoric 01.07.2012 - 15:26
0

El paralelismo simplemente significa hacer muchas tareas simultáneamente; por otro lado, la concurrencia es la capacidad del kernel para realizar muchas tareas cambiando constantemente entre muchos procesos.

Para lograr el paralelismo, es importante que el sistema tenga muchos núcleos solo para que el paralelismo se pueda lograr de manera eficiente. Y hay mucho impacto en el rendimiento y se incurre en muchos gastos generales si se intenta el paralelismo en una máquina de un solo núcleo.

Por ejemplo, el sistema anterior tenía solo un núcleo y los programadores de la CPU darían una ilusión de paralelismo al cambiar constantemente los procesos permitiendo que cada proceso progrese.

    
respondido por el user196279 12.09.2015 - 08:07

Lea otras preguntas en las etiquetas