2012-06-26 8 views
10

All'inizio della programmazione Erlang, v'è il seguente:Che cosa rende Erlang inadatto a lavori computazionalmente costosi?

Ciò che rende Erlang la scelta migliore per il vostro progetto? Dipende da cosa stai cercando da costruire. Se stai cercando di scrivere un'applicazione per il cronometraggio dei numeri, un sistema intensivo di grafica o un software client in esecuzione su un telefono cellulare, quindi mi spiace, hai acquistato il libro sbagliato con lo .

Il messaggio implicito è che Erlang non è adatto per il lavoro computazionalmente costoso. Cosa rende Erlang così inadatto o che ho interpretato male?

+0

Parte di esso è che altre lingue sono * più * adatte; La robusta suite di Erlang non è, diciamo, algoritmi numerici. Per quello useresti C/Fortran/etc. –

+2

è perché qualcos'altro è meglio di Erlang al calcolo. Erlang continua a fare calcoli e se un problema computazionale può essere "parallelo", l'erlang potrebbe persino migliorare. –

risposta

9

Erlang brilla per applicazioni con I/O, ovvero problemi il cui fattore limitante è la latenza e il throughput delle operazioni di I/O piuttosto che la velocità con cui le istruzioni possono essere trasferite attraverso una pipeline della CPU. Server e database Web sono buoni esempi di applicazioni con I/O: i fattori di liming sono probabilmente il disco e la rete piuttosto che la CPU. Tradizionalmente le applicazioni "pesanti da calcolo" includono strumenti crittografici e simulazioni scientifiche.

Quanto al motivo per Erlang non riesce ad abbinare linguaggi come C e Fortran quando si tratta di problemi computazionalmente intensive, dobbiamo considerare le cose come la generazione di codice e cache-cordialità ... darò una prova:

  • Generazione codice: Normalmente quando si avvia un programma Erlang, verrà eseguito in BEAM, un virtual machine basato su threaded code. Mentre BEAM funziona abbastanza bene per la maggior parte degli scopi, ha un overhead molto maggiore per "istruzioni" logiche rispetto al tipo di codice generato da un moderno compilatore C ottimizzante. Il progetto HiPE fornisce un compilatore di codice nativo per Erlang che è stato integrato nell'albero dei sorgenti OTP principale un paio di anni fa *. Mentre certamente migliora la capacità di crunch del numero di Erlang, sarà comunque difficile combinare un programma C o Fortran ben scritto.
  • Cache-friendliness: il sistema di memoria è un collo di bottiglia importante nei computer moderni: una lettura dalla memoria principale può richiedere centinaia di cicli del processore! Per risolvere questo problema, i progettisti di CPU introducono diversi livelli di cache per nascondere la latenza della memoria. Le cache sfruttano due proprietà chiave dei programmi per computer: temporanea e territoriale località - ovvero, è probabile che le regioni di memoria a cui si fa riferimento di recente (e le regioni vicine) vengano nuovamente referenziate. Linguaggi come C e Fortran offrono un grande controllo su dove e come viene allocata la memoria, consentendo al programmatore di mettere a punto gli algoritmi per giocare bene con le cache. Lo stesso non vale per le lingue dinamiche come Erlang, dove l'allocazione della memoria è nascosta dal programmatore e gestita automaticamente dalla macchina virtuale.
  • Dimensioni codice: l'argomento sulla località spaziale vale anche per il codice; Il codice di Erlang, sia in formato nativo che in codice byte, sarà generalmente più grande del corrispondente codice C compilato. Ciò porta a errori più frequenti nella cache delle istruzioni.

Tenete presente che questa è solo la punta dell'iceberg e che non sono affatto un esperto in Erlang o implementazione linguistica. Non lasciare che il fatto che Erlang probabilmente non eseguirà mai simulazioni scientifiche ti spaventerà; per molte applicazioni, è un linguaggio assolutamente fantastico.

* HiPE è disponibile tramite il pacchetto erlang-base-hipe in Debian o ./configure --enable-hipe da un tarball sorgente.

+2

Buon post! Per mettere il massimo della prestazione in breve, "Quanto più sei vicino alla macchina che stai programmando, tanto più veloce puoi ottenere dal momento che è possibile aggiungere meno spese generali per istruzione logica." –

+0

Grazie per le tue parole gentili e un bel riassunto! –

9

È solo che il codice C potrebbe essere considerevolmente più veloce il più delle volte. Erlang è ottimo per la tolleranza agli errori, il calcolo distribuito e la concorrenza. I programmatori tendono ad essere ugualmente abili nello scrivere erlang o in altri linguaggi, ma se vuoi velocità, usa C o C++, magari da una porta di erlang, quindi questo codice è utilizzabile dalla tua applicazione di erlang.

8

Erlang è un linguaggio di programmazione funzionale simultaneo progettato per la programmazione di grandi sistemi industriali in tempo reale. Niente in particolare impedisce di sviluppare "un'applicazione che crea numeri" o un sistema ad alta intensità di grafica ", ma il linguaggio risplende nell'elaborazione degli eventi in tempo reale.

Problemi correlati