Credo che questa risposta sia più corretta delle risposte esistenti e modificarle avrebbe cambiato la loro essenza. Ho provato a collegare a varie fonti o pagine di Wikipedia, così altri possono affermare la correttezza.
Concurrency: la proprietà di un sistema che consente alle unità del programma, all'algoritmo o al problema di essere eseguiti fuori ordine o in ordine parziale senza influenzare l'esito finale 1 2 .
Un semplice esempio di questo è aggiunte consecutive:
0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 = 45
A causa della proprietà commutativa di aggiunta, l'ordine di questi può essere riorganizzato senza intaccare la correttezza; la seguente disposizione produrrà la stessa risposta:
(1 + 9) + (2 + 8) + (3 + 7) + (4 + 6) + 5 + 0 = 45
Qui ho raggruppato i numeri in coppie che saranno pari a 10, rendendo più facile per me arrivare alla risposta corretta nella mia testa.
Parallel Computing: un tipo di calcolo in cui molti calcoli o l'esecuzione di processi sono eseguiti simultaneamente 3 4 . In questo modo il calcolo parallelo sfrutta la proprietà della concorrenza per eseguire simultaneamente più unità del programma, dell'algoritmo o del problema.
Continuando con l'esempio di aggiunte consecutive, possiamo eseguire diverse parti della somma in parallelo:
Execution unit 1: 0 + 1 + 2 + 3 + 4 = 10
Execution unit 2: 5 + 6 + 7 + 8 + 9 = 35
Quindi alla fine sommiamo i risultati di ogni lavoratore per ottenere 10 + 35 = 45
.
Ancora una volta, questo parallelismo era possibile solo perché le aggiunte consecutive hanno la proprietà della concorrenza.
Tuttavia, la concorrenza può essere sfruttata più di un semplice parallelismo. Considera la pre-emption su un sistema single-core: in un periodo di tempo il sistema può fare progressi su più eseguire processi senza che nessuno di essi finisca. In effetti, il tuo esempio di I / O asincrono è un esempio comune di concorrenza che non richiede il parallelismo.
Confusion
Quanto sopra è relativamente semplice. Sospetto che le persone vengano confuse perché le definizioni del dizionario non corrispondono necessariamente a quanto descritto sopra:
- Concorrente: occorrente o esistente contemporaneamente o affiancato 5 .
- Concorrenza: il fatto di due o più eventi o circostanze che si verificano o esistenti contemporaneamente Dalla ricerca su google: "define: concurrency" .
Il dizionario definisce "concorrenza" come un fatto di accadimento, mentre la definizione nel vernacolo informatico è una proprietà latente di un programma, di una proprietà o di un sistema. Sebbene correlate, queste cose non sono le stesse.
Consigli personali
Raccomando di usare il termine "parallelo" quando l'esecuzione simultanea è assicurata o prevista, e di usare il termine "concorrente" quando è incerto o irrilevante se si impiegherà l'esecuzione simultanea.
Descriverei quindi la simulazione di un motore jet su più core come parallelo.
Descriverei Makefile come un esempio di concorrenza. I makefile indicano le dipendenze di ciascun target. Quando i bersagli dipendono da altri bersagli, ciò crea un ordine parziale. Quando le relazioni e le ricette sono definite in modo completo e corretto, questo stabilisce la proprietà della concorrenza: esiste un ordine parziale tale che l'ordine di determinati compiti possa essere riorganizzato senza influire sul risultato. Ancora una volta, questa concorrenza può essere sfruttata per costruire più regole contemporaneamente, ma la concorrenza è una proprietà del Makefile indipendentemente dal fatto che il parallelismo sia impiegato o meno.