Oltre al fatto che Erlang è stato specificamente sviluppato per funzionare in situazioni concomitanti / parallelizzate / distribuite, le due tecniche principali che impiega per renderlo possibile sono:
Nessun effetto collaterale:
Ciò significa che, quando si assegna a una funzione una parte di dati da eseguire, ciò non influirà, in casi molto severi, su qualsiasi altra cosa nel sistema / processo in esecuzione. Ciò significa che se si esegue contemporaneamente una funzione 300 volte contemporaneamente, nessuna di queste 300 esecuzioni della funzione avrà effetto su nessuna delle altre.
La tecnica di implementazione per garantire che nessun effetto collaterale sia chiamata "immutabilità", che significa approssimativamente, non può essere mutata (modificata). Ciò significa che non appena si crea una variabile, il valore di quella variabile non può essere modificato. Erlang implementa questo comportamento con "assegnazione singola", quindi dopo aver assegnato un valore a una variabile, non è possibile assegnarlo nuovamente.
X = 1.
X = 2. // This is not a valid operation
Questo assicura che nessun codice possa cambiare accidentalmente il valore di X causando una condizione di competizione, quindi è intrinsecamente sicuro per i thread e l'uso simultaneo diventa banale. Questo è un comportamento molto raro tra i linguaggi software e il modo più grande in cui Erlang riesce ad essere così adatto per l'esecuzione simultanea.
Il modello dell'attore:
Questo è un modo particolare di modellizzazione che ha dimostrato di rendere molto semplice per gli sviluppatori l'implementazione e la gestione dell'elaborazione simultanea. Direttamente da Wikipedia (http://en.wikipedia.org/wiki/Actor_model):
Il modello Actor adotta la filosofia secondo cui tutto è attore. Questo è simile a tutto ciò che è una filosofia dell'oggetto usata da alcuni linguaggi di programmazione orientati agli oggetti, ma differisce dal fatto che il software orientato agli oggetti viene tipicamente eseguito in sequenza, mentre il modello Actor è intrinsecamente concorrente. Un attore è un'entità computazionale che, in risposta a un messaggio che riceve, può contemporaneamente: inviare un numero finito di messaggi ad altri attori; creare un numero finito di nuovi attori; designare il comportamento da utilizzare per il prossimo messaggio che riceve. Non vi è alcuna sequenza presunta per le azioni di cui sopra e potrebbero essere eseguite in parallelo. Il disaccoppiamento del mittente dalle comunicazioni inviate è stato un avanzamento fondamentale del modello di attore che consente strutture di comunicazione e controllo asincrone come schemi di passaggio dei messaggi.