È un errore pensare al parallelismo come solo alla potenza di calcolo dei numeri grezzi. Erlang è più simile al modo in cui funziona un computer cluster, ad esempio una GPU o un supercomputer classico.
Nelle moderne GPU e supercomputer di vecchio stile, le prestazioni riguardano l'aritmetica vettoriale, l'hardware di calcolo per scopi speciali e la comunicazione a bassa latenza tra le unità di elaborazione. Poiché la latenza delle comunicazioni è bassa e ogni singola unità di elaborazione è molto veloce, il modello di utilizzo ideale è caricare la RAM della macchina con i dati e farla scricchiolare tutto in una volta. Questa elaborazione potrebbe comportare molti passaggi di dati tra i nodi, come accade nell'elaborazione delle immagini o in 3D, dove ci sono molte attività legate alla CPU da fare per trasformare i dati dal modulo di input alla forma di output. Questo tipo di macchina è una scelta sbagliata quando si deve spesso accedere a un disco, una rete o qualche altro canale I/O lento per i dati. Questo inattivo almeno un costoso processore specializzato, e probabilmente anche soffoca la pipeline di elaborazione dei dati, quindi nient'altro viene fatto.
Se il programma richiede un uso intenso dei canali di I/O lenti, un tipo migliore di macchina è uno con molti processori indipendenti a basso costo, come un cluster. È possibile eseguire Erlang su una singola macchina, nel qual caso si ottiene qualcosa come un cluster all'interno di quella macchina, oppure è possibile eseguirlo facilmente su un cluster hardware effettivo, nel qual caso si dispone di un cluster di cluster.In questo caso, il sovraccarico della comunicazione è ancora inattivo nelle unità di elaborazione, ma poiché sono presenti molte unità di elaborazione in esecuzione su ciascun bit dell'hardware di elaborazione, Erlang può passare a uno degli altri processi all'istante. Se succede che un'intera macchina è lì seduta in attesa di I/O, hai ancora gli altri nodi nel cluster hardware che possono funzionare in modo indipendente. Questo modello si rompe solo quando il sovraccarico della comunicazione è così alto che ogni nodo è in attesa su qualche altro nodo, o per I/O generale, nel qual caso è necessario un I/O più veloce o più nodi, entrambi i quali Erlang ne approfitta in modo naturale di.
I sistemi di comunicazione e controllo sono le applicazioni ideali di Erlang perché ogni singola attività di elaborazione richiede poca CPU e solo occasionalmente necessita di comunicare con altri nodi di elaborazione. La maggior parte delle volte, ogni processo funziona in modo indipendente, ognuno dei quali richiede una piccola parte della potenza della CPU. La cosa più importante qui è la capacità di gestire molte migliaia di questi in modo efficiente.
Il classico caso in cui è assolutamente necessario un supercomputer classico è la previsione del tempo. Qui, dividi l'atmosfera in cubi e fai simulazioni di fisica per scoprire cosa succede in ogni cubo, ma non puoi usare un ammasso perché l'aria si muove tra ogni cubo, così ogni cubo comunica costantemente con i suoi 6 vicini adiacenti. (L'aria non attraversa i bordi o gli angoli di un cubo, essendo infinitamente fine, quindi non parla con gli altri 20 cubi vicini.) Esegui questo in un cluster, sia eseguendo Erlang su di esso o qualche altro sistema, e diventa immediatamente vincolato all'I/O.
Erlang è stato creato per essere un linguaggio concorrente per la creazione di servizi di telecomunicazione distribuiti massicci e affidabili: è piuttosto naturale che si stessero concentrando su es. protocollo che analizza più del tipico numero crunch. – nos
Vedo un voto ravvicinato sui motivi di "soggettivo e argomentativo", e concordo sul fatto che il titolo lasci qualcosa a desiderare, ma le domande sono ben formulate e neutrali, e ad oggi abbiamo solo risposte utili. Direi di lasciarlo a meno che le cose non vadano in discesa. ** @ Jon: ** Considerare la riformulazione del titolo. – dmckee
Che ne dici? Ho davvero provato a dire le cose con attenzione e obiettivamente. Non ho visto le cose per rispondere alle mie domande, quindi ho dovuto chiedere. –