Creo que esta respuesta es más correcta que las respuestas existentes y editarlas habría cambiado su esencia. He tratado de vincular a varias fuentes o páginas de wikipedia para que otros puedan afirmar lo correcto.
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 suma, el orden de estos puede reorganizarse sin afectar la corrección; la siguiente disposición dará como resultado la misma respuesta:
(1 + 9) + (2 + 8) + (3 + 7) + (4 + 6) + 5 + 0 = 45
Aquí he agrupado los números en pares que sumarán 10, haciéndome más fácil llegar a la respuesta correcta en mi cabeza.
Computación paralela: un tipo de computación en la cual muchos cálculos o la ejecución de procesos se llevan a cabo simultáneamente 3 4 . Por lo tanto, la computación paralela aprovecha la propiedad de concurrencia para ejecutar múltiples 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 simultaneidad puede ser aprovechada por algo más que el paralelismo. Considere la preferencia en un sistema de un solo núcleo: durante un período de tiempo, el sistema puede avanzar en múltiples procesos en ejecución sin que ninguno de ellos finalice. 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 las personas se confunden porque las definiciones del diccionario no coinciden necesariamente con lo que se describió anteriormente:
- Concurrente: ocurre o existe simultáneamente o de 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: concurrencia" .
El diccionario define "concurrencia" como un hecho de ocurrencia, mientras que la definición en la informática vernácula es una propiedad latente de un programa, propiedad o sistema. Aunque relacionadas estas cosas no son lo mismo.
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 simular un motor a reacción en múltiples núcleos como paralelo.
Describiría Makefiles como un ejemplo de concurrencia. Los Makefiles indican las dependencias de cada objetivo. Cuando los objetivos dependen de otros objetivos, esto crea un orden parcial. Cuando las relaciones y las recetas se definen de manera completa y correcta, esto establece la propiedad de concurrencia: existe un orden parcial tal que el orden de ciertas tareas se puede reorganizar sin afectar el resultado. Una vez más, esta concurrencia se puede aprovechar para construir múltiples reglas simultáneamente, pero la concurrencia es una propiedad del Makefile, ya sea que se use el paralelismo o no.