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.
fonte
2012-06-28 19:45:33
Parte di esso è che altre lingue sono * più * adatte; La robusta suite di Erlang non è, diciamo, algoritmi numerici. Per quello useresti C/Fortran/etc. –
è 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. –