Erlang and Go programmazione concorrente, differenze oggettive tra CSP e attori?

19

Stavo cercando una programmazione concorrente nei linguaggi di programmazione Erlang and Go. Come per la mia scoperta, vengono utilizzati rispettivamente il modello di attore e CSP.

Ma sono ancora confuso con quali sono le differenze oggettive tra CSP e gli attori? è solo teoricamente diverso ma lo stesso concetto?

    
posta nish1013 01.08.2013 - 11:24
fonte

1 risposta

21

In pratica, c'è poca differenza: entrambi rappresentano unità di esecuzione separate la cui interfaccia primaria con il mondo esterno è tramite messaggi.

Le differenze sono nei dettagli di implementazione delle lingue. Ecco alcuni dettagli del genere:

  • I canali in Go sono stati digitati; se vuoi inviare messaggi con dati diversi, hai bisogno di canali separati. Con Erlang, un receive ottiene tutto ciò che viene inviato al processo e deve corrispondere a pattern (in Vai, dovresti usare select con più casi, quindi il codice sarebbe molto simile, solo con canali diversi).
  • Chiunque può leggere o scrivere un canale Go. In Erlang, chiunque può inviare a un processo, ma solo quel processo riceverà. Questo diventa importante se si desidera dividere un'attività tra più worker: in Erlang è necessario creare un processo di distribuzione, mentre Go può semplicemente condividere un canale.
  • Erlang fornisce un percorso (principalmente) trasparente per la distribuzione dei processi su più host / VM. Le goroutine sono confinate in un singolo processo (sebbene ci siano librerie per la distribuzione).
  • La gestione degli errori è molto diversa. Erlang considera ogni processo come indipendente: un errore in un processo (ad esempio divide per 0) non influirà su nessun altro processo a meno che non li colleghi esplicitamente (anche se qualcosa in attesa di un messaggio dal processo morto si bloccherà). Le goroutine scorrono tutte nello stesso spazio del processo; una divisione per 0 eliminerà l'intero programma.
  • In Erlang, i dati sono immutabili. Ciò significa che la tutta comunicazione tra un processo e il mondo esterno avviene attraverso i messaggi. Go ti consente di condividere lo stato tra le goroutine (anche se non dovresti).

Questo ultimo punto è, penso, il più importante. Mentre entrambi usano i messaggi come mezzo di comunicazione primario , Erlang offre garanzie molto più forti su come e quando lo stato può cambiare.

    
risposta data 01.08.2013 - 15:39
fonte

Leggi altre domande sui tag