Ho fatto delle ricerche sui vari approcci alla concorrenza, e ho finito con la seguente tassonomia:
- Concorrenza manuale basata su thread con blocchi
- Code e callback di distribuzione asincrona implementati in libdispatch (GCD) di Apple
- Funzioni asincrone, blocco e trasmissione del messaggio come costrutti del linguaggio di prima classe implementati in Go
- Concorrenza funzionale in cui l'immutabilità rende la parallelizzazione quasi automatica come implementata in Haskell, Clojure, ecc.
Ovviamente questa non è una tassonomia "pura" (dato che alcuni elementi sono costruiti sopra altri), ma sembra corrispondere ai paradigmi adottati dalle persone e dalle lingue per scrivere codice reale, utile (cioè non documenti accademici) .
Supponendo che la mia lista sia corretta, sto cercando un veterano della concorrenza grizzled per darmi una breve carrellata sui pro e contro di ciascuno.
Ad esempio, molte persone tendono a considerare i thread difficili da gestire, ma apprezzano che sono un costrutto di basso livello che può essere altamente performante se ti puoi permettere il tempo di sviluppo. Sto cercando quel livello di dettaglio sugli altri 3 e qualsiasi confronto pertinente tra loro.