2010-08-24 3 views
6

ero alla ricerca del modello su processo di Erlang su internet e scoperto alcuni grafici alt textslides 3-4 in una delle discorso tenuto da Joe Armstrong. Mostra una differenza di tra la creazione del processo e il tempo di passaggio dei messaggi tra Erlang, java e C#. Qualcuno può dirmi il motivo alla base di tale differenza ?Perché creazione processo Erlang e il messaggio che passa il tempo meno di Java e C#

+0

Il grafico e le diapositive forniscono poche informazioni per sapere cosa è stato effettivamente misurato qui. Non è nemmeno chiaro ciò che è considerato un "processo". Ad esempio, sembra che un processo di Erlang non sia un processo a livello di sistema operativo in cui è presente Java o C#. Sembra come confrontare mele e arance ... –

+3

@ 0xA3: I processi di Erlang si comportano come i processi dal punto di vista dello sviluppatore. Sono unità di esecuzione isolate. Si comportano come i processi, non come i fili. È colpa degli altri che utilizzano processi o thread a livello di sistema operativo e non forniscono lo stesso utile strumento per risolvere problemi reali. Se vuoi fare le stesse cose di Erlang in quelle lingue devi usare quello che puoi, quindi il confronto è corretto. –

+0

possibile duplicato di [Tecnicamente perché i processi in Erlang sono più efficienti dei thread del sistema operativo?] (Http://stackoverflow.com/questions/2708033/technically-why-is-processes-in-erlang-more-efficient-than-os -threads) – Christian

risposta

7

In Erlang, i processi non sono processi reali. Sono strutture leggere gestite dal linguaggio. Il trasferimento dei messaggi viene gestito anche dalla lingua, utilizzando la memoria condivisa quando possibile.

D'altra parte, altri linguaggi utilizzano thread/processi reali poiché non hanno strutture di luce incorporate come questa. Pertanto, queste strutture sono un po 'più pesanti, utilizzano le primitive di thread per comunicare (più lentamente).

Non so del tuo grafico, ma immagino che dimostri che i processi di Erlang sono migliori. Si è fatto un confronto tra cose che sono intrinsecamente diverse, tuttavia mostra che Erlang oscilla per modellare oggetti autonomi che comunicano usando i messaggi (cose che non si possono realmente fare in altre lingue).

+5

Non direi che utilizza la memoria condivisa, poiché i dati sono (quasi) sempre copiati tra gli heap dei processi. Anche se tutto accade ancora all'interno di un processo del sistema operativo. – gleber

+1

Penso che Scharron intendesse dire che mentre concettualmente nulla è condiviso, è possibile che la VM condivida i dati passando i puntatori in giro invece di copiare i dati, come un'ottimizzazione. –

3

I processi di Erlang sono molto leggeri. Un'implementazione non ha nemmeno bisogno di allocare un thread del sistema operativo a un processo di Erlang. Questo ha a che fare con la natura funzionale di Erlang.

+1

Non proprio collegato a Erlang essendo un linguaggio funzionale a tutti. Qualunque linguaggio con processi economici e trasmissione di messaggi avrebbe funzionato. (Non che ci siano altre lingue con processi simili a Erlang ...) –

+1

In realtà è molto correlato a Erlang essere un linguaggio funzionale in quanto la natura funzionale delle variabili a assegnazione singola rimuove gran parte dell'onere dell'isolamento del processo perché non ci può nessun aggiornamento condiviso o conflitto di accesso di cui preoccuparsi. Aggiungi la copia del messaggio anziché il riferimento e hai una ricetta per processi davvero leggeri. – Alan

+0

@Alan: sì, è quello che avevo in mente, grazie per averlo scritto per me. :) –