Leggo spesso che il parallelismo e la concorrenza sono cose diverse. Molto spesso i risponditori / commentatori arrivano fino a scrivere che sono due cose completamente diverse. Eppure, a mio avviso, sono collegati, ma vorrei alcuni chiarimenti al riguardo.
Ad esempio, se sono su una CPU multi-core e riesco a dividere il calcolo in un calcolo x più piccolo (diciamo usando fork / join) ciascuno in esecuzione nel proprio thread, avrò un programma che sta facendo entrambi un calcolo parallelo (perché presumibilmente in qualsiasi momento nel tempo diversi thread verranno eseguiti su più core) ed essere simultanei giusto?
Mentre se sto semplicemente usando, diciamo, Java e gestendo eventi dell'interfaccia utente e ridisegnando il thread di invio degli eventi oltre a eseguire l'unico thread che ho creato da solo, avrò un programma simultaneo (EDT + thread GC + il mio thread principale ecc.) ma non parallelo.
Mi piacerebbe sapere se sto andando bene e se il parallelismo (su un sistema "single ma multi-core") implica sempre la concorrenza o no?
Inoltre, i programmi multi-thread sono in esecuzione su CPU multi-core ma in cui i diversi thread stanno eseguendo un calcolo totalmente diverso considerato come "parallelismo"?