Credo che questa risposta sia più corretta delle risposte esistenti e modificarle avrebbe cambiato la loro essenza. Ho cercato di collegarmi a varie fonti o pagine di Wikipedia in modo che altri possano affermare la correttezza.
Concorrenza: proprietà di un sistema che consente di eseguire unità del programma, algoritmo o problema fuori servizio o in ordine parziale senza influire sul risultato finale 1 2 .
Un semplice esempio di ciò sono le aggiunte consecutive:
0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 = 45
A causa della proprietà commutativa dell'aggiunta, l'ordine di questi può essere riorganizzato senza influire sulla correttezza; la seguente disposizione comporterà la stessa risposta:
(1 + 9) + (2 + 8) + (3 + 7) + (4 + 6) + 5 + 0 = 45
Qui ho raggruppato i numeri in coppie che si sommano a 10, rendendo più facile per me arrivare alla risposta corretta nella mia testa.
Calcolo parallelo: un tipo di calcolo in cui vengono eseguiti simultaneamente molti calcoli o l'esecuzione di processi 3 4 . Pertanto, il calcolo parallelo sfrutta la proprietà della concorrenza per eseguire simultaneamente più unità del programma, algoritmo o problema.
Continuando con l'esempio delle aggiunte consecutive, possiamo eseguire in parallelo diverse parti della somma:
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 ciascun lavoratore per ottenere 10 + 35 = 45
.
Ancora una volta, questo parallelismo è stato possibile solo perché le aggiunte consecutive hanno la proprietà della concorrenza.
La concorrenza può essere sfruttata da qualcosa di più del semplice parallelismo. Prendi in considerazione la prelazione su un sistema single-core: per un certo periodo di tempo il sistema può fare progressi su più processi in esecuzione senza che nessuno di essi finisca. In effetti, il tuo esempio di I / O asincrono è un esempio comune di concorrenza che non richiede parallelismo.
Confusione
Quanto sopra è relativamente semplice. Sospetto che le persone si confondano perché le definizioni del dizionario non corrispondono necessariamente a quanto indicato sopra:
- Concorrente: si verifica o esiste contemporaneamente o fianco a fianco 5 .
- Concorrenza: il fatto che due o più eventi o circostanze accadano o esistano allo stesso tempo Dalla ricerca su google: "definisci: concorrenza" .
Il dizionario definisce la "concorrenza" come un fatto di occorrenza, mentre la definizione in volgare informatico è una proprietà latente di un programma, proprietà o sistema. Sebbene correlate queste cose non sono le stesse.
Consigli personali
Consiglio di usare il termine "parallelo" quando l'esecuzione simultanea è assicurata o prevista e di usare il termine "concorrente" quando è incerto o irrilevante se verrà utilizzata l'esecuzione simultanea.
Descriverei quindi la simulazione di un motore a reazione su più core come parallela.
Descriverei Makefile come un esempio di concorrenza. I makefile indicano le dipendenze di ciascun target. Quando i target dipendono da altri target, questo crea un ordinamento parziale. Quando le relazioni e le ricette sono definite in modo completo e corretto ciò stabilisce la proprietà della concorrenza: esiste un ordine parziale tale che l'ordine di determinati compiti può essere riorganizzato senza influenzare il 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.