Spesso leggo che parallelismo e concorrenza sono cose diverse. Molto spesso i rispondenti / commentatori arrivano a scrivere che sono due cose completamente diverse. Eppure secondo me sono imparentati, ma mi piacerebbe qualche chiarimento su questo.
Ad esempio, se sono su una CPU multi-core e riesco a dividere il calcolo in x calcoli più piccoli (ad esempio usando fork / join), ognuno con una propria thread, avrò un programma che sta facendo entrambi calcoli paralleli (perché presumibilmente in qualsiasi momento diversi thread verranno eseguiti su più core) e essendo concomitante giusto?
Sebbene io stia semplicemente usando, diciamo, Java e gestendo gli eventi UI e ridimensioni sul thread Dispatch eventi e eseguendo l'unico thread creato da me stesso, avrò un programma che è simultaneo (EDT + thread GC + il mio thread principale ecc.) ma non parallelo.
Mi piacerebbe sapere se ho capito bene e se il parallelismo (su un sistema "singolo ma multi-core") implica sempre la concorrenza o no?
Inoltre, ci sono programmi multi-thread in esecuzione su CPU multi-core, ma dove i diversi thread stanno facendo calcoli completamente diversi considerati come "parallelismo"?