Costumo ler que paralelismo e concorrência são coisas diferentes. Muitas vezes, os respondentes / comentadores chegam a escrever que são duas coisas completamente diferentes. No entanto, na minha opinião, eles estão relacionados, mas eu gostaria de alguns esclarecimentos sobre isso.
Por exemplo, se eu estou em uma CPU multi-core e conseguem dividir o cálculo em x menor computação (digamos usando fork / join) cada um executando em seu próprio segmento, eu vou ter um programa que é computação paralela fazer (porque supostamente a qualquer momento várias threads serão executadas em vários núcleos) e sendo simultâneas, certo?
Embora se eu esteja simplesmente usando, digamos, Java e lidando com eventos da interface do usuário e repaints no Event Dispatch Thread e executando o único thread que eu mesmo criei, terei um programa simultâneo (EDT + GC thread + meu thread principal) etc.) mas não paralelo.
Gostaria de saber se estou acertando e se o paralelismo (em um sistema "único, mas com vários núcleos") sempre implica simultaneidade ou não?
Além disso, existem programas multiencadeados em execução na CPU com vários núcleos, mas onde os diferentes encadeamentos estão fazendo cálculos totalmente diferentes, considerados como "paralelismo"?