Creo que esta respuesta es más correcta que las respuestas existentes y editarlas habría cambiado su esencia. He intentado enlazar a varias fuentes o páginas de wikipedia para que otros puedan afirmar que son correctos.
Concurrencia: la propiedad de un sistema que permite que las unidades del programa, algoritmo o problema se ejecuten fuera de orden o en orden parcial sin afectar el resultado final 1 2 .
Un ejemplo simple de esto son las adiciones consecutivas:
0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 = 45
Debido a la propiedad conmutativa de la adición, el orden de estos se puede reorganizar sin afectar la corrección; El siguiente arreglo resultará en la misma respuesta:
(1 + 9) + (2 + 8) + (3 + 7) + (4 + 6) + 5 + 0 = 45
Aquí agrupé los números en pares que sumarán 10, lo que me facilita la respuesta correcta en mi mente.
Computación paralela: un tipo de cálculo en el que se realizan simultáneamente muchos cálculos o la ejecución de procesos 3 4 . Por lo tanto, la computación paralela aprovecha la propiedad de la concurrencia para ejecutar varias unidades del programa, algoritmo o problema simultáneamente.
Continuando con el ejemplo de adiciones consecutivas, podemos ejecutar diferentes porciones de la suma en paralelo:
Execution unit 1: 0 + 1 + 2 + 3 + 4 = 10
Execution unit 2: 5 + 6 + 7 + 8 + 9 = 35
Luego, al final, sumamos los resultados de cada trabajador para obtener 10 + 35 = 45
.
Nuevamente, este paralelismo solo fue posible porque las adiciones consecutivas tienen la propiedad de concurrencia.
Sin embargo,
la concurrencia puede ser aprovechada por algo más que el paralelismo. Considere preferencia en un sistema de un solo núcleo: durante un período de tiempo, el sistema puede avanzar en varios Procesos en ejecución sin que ninguno de ellos termine. De hecho, su ejemplo de E / S asíncrona es un ejemplo común de concurrencia que no requiere paralelismo.
Confusión
Lo anterior es relativamente sencillo. Sospecho que la gente se confunde porque las definiciones del diccionario no coinciden necesariamente con lo que se describió anteriormente:
- Concurrente: ocurre o existe simultáneamente o lado a lado 5 .
- Concurrencia: el hecho de que dos o más eventos o circunstancias sucedan o existan al mismo tiempo Desde la búsqueda en google: "define: concurrency" .
El diccionario define "concurrencia" como un hecho de ocurrencia, mientras que la definición en la lengua vernácula informática es una propiedad latente de un programa, propiedad o sistema. Aunque relacionadas estas cosas no son las mismas.
Recomendaciones personales
Recomiendo usar el término "paralelo" cuando la ejecución simultánea está asegurada o esperada, y usar el término "concurrente" cuando sea incierto o irrelevante si se empleará la ejecución simultánea.
Por lo tanto, describiría la simulación de un motor a reacción en múltiples núcleos como paralelo.
Describiría Makefiles como un ejemplo de concurrencia. Los makefiles establecen las dependencias de cada objetivo. Cuando los objetivos dependen de otros objetivos, esto crea un orden parcial. Cuando las relaciones y las recetas están definidas de manera integral y correcta, esto establece la propiedad de la concurrencia: existe un orden parcial tal que el orden de ciertas tareas se puede reorganizar sin afectar el resultado. Nuevamente, esta concurrencia puede aprovecharse para crear múltiples reglas simultáneamente, pero la concurrencia es una propiedad del Makefile, ya sea que se utilice el paralelismo o no.