Il parallelismo implica la concorrenza ma non il contrario?

14

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"?

    
posta Cedric Martin 01.07.2012 - 13:40
fonte

3 risposte

13

Secondo Wikipedia :

Parallel computing is a form of computation in which many calculations are carried out simultaneously, operating on the principle that large problems can often be divided into smaller ones, which are then solved concurrently ("in parallel").

Cioè, il parallelismo implica sempre la concorrenza.

Also, are multi-threaded programs running on multi-cores CPU but where the different threads are doing totally different computation considered to be using "parallelism"?

No. L'essenza del parallelismo è che un grosso problema è diviso in più piccoli in modo che i pezzi più piccoli possano essere risolti contemporaneamente. I pezzi sono reciprocamente indipendenti (in una certa misura almeno), ma fanno ancora parte del problema più grande, che ora viene risolto in parallelo.

L'essenza della concorrenza è che un certo numero di thread (o processi, o computer) stanno facendo qualcosa simultaneamente , possibilmente (ma non necessariamente) interagendo in qualche modo. Wikipedia di nuovo :

Concurrency is a property of systems in which several computations are executing simultaneously, and potentially interacting with each other.

    
risposta data 01.07.2012 - 14:05
fonte
3

Il codice può essere simultaneo, ma non parallelo.

Immagina più thread in esecuzione su una macchina single core. Questa macchina single core elaborerà solo un thread alla volta, quindi non ci sarà il parallelismo delle operazioni. Ma per ogni thread, grazie al modo in cui il sistema operativo gestisce più thread, ogni thread deve presupporre che tutti gli altri thread siano in esecuzione contemporaneamente.

    
risposta data 01.07.2012 - 15:26
fonte
0

Parallelismo significa semplicemente fare molti compiti contemporaneamente; d'altra parte la concorrenza è la capacità del kernel di eseguire molte attività passando costantemente da un numero all'altro di processi.

Per raggiungere il parallelismo è importante che il sistema abbia molti core solo dopo che il parallelismo può essere raggiunto in modo efficiente. E c'è molto successo sulle prestazioni e molti costi generali sono sostenuti se il parallelismo viene provato su un singolo computer core.

Ad esempio, il sistema precedente aveva un solo core e gli scheduler della CPU davano l'illusione del parallelismo passando continuamente da un processo all'altro per consentire a ciascun processo di progredire.

    
risposta data 12.09.2015 - 08:07
fonte

Leggi altre domande sui tag