le discussioni quale sistema operativo si abitua a macchina astratta di Erlang, FASCIO?

StackOverflow https://stackoverflow.com/questions/3663823

  •  01-10-2019
  •  | 
  •  

Domanda

Ho iniziato a studiare Erlang e trovare l'ambiente di runtime BEAM affascinante. E 'comunemente affermato che in Erlang, processi appartengono al linguaggio piuttosto che il sistema operativo (cioè il tempo di esecuzione, il che significa BEAM in questo caso). Questi sono i leggeri, “processi verdi” che Erlang sta ottenendo famosa. E 'inoltre dichiarato (a pagina 5 di questo documento ) che utilizza BEAM un filo (1) OS per core CPU per la programmazione e altro thread OS per i / o. Allora mi chiedo:? Da quello filo fanno i cicli di CPU necessari per eseguire il codice in realtà Erlang provenire da

Inoltre, se sto in esecuzione su una macchina dual core mi aspetterei - sulla base di quello che ho letto finora - di vedere tre (3) thread in esecuzione nell'ambito del processo di BEAM: due scheduler (uno per ogni core) e uno i / o thread. Ma vedo 10. A volte 11. A volte è dalle ore 13 e, come amplificatori di alta qualità, va a 11.

Sono confuso. Tutta la comprensione sarà apprezzato.

È stato utile?

Soluzione

A seguito @ consiglio di user425720, ho chiesto alla mia domanda sul Erlang-domande LISTSERV. E 'disponibile come gruppo Google anche. Kresten Krab Thorup di Trifork mi ha risposto quasi subito. I miei ringraziamenti per andare fuori a Kreston. Ecco la sua risposta. (Informazioni tra parentesi e l'enfasi sono miei).

  

Ecco quanto ne so, lo scenario di base:

     

codice Erlang sarà gestito in ben   "fili verdi" quanti sono i   processi; il limite processo è   controllata dalla bandiera + P (linea di comando).

     

I fili verdi vengono mappati a S   fili, dove S è il numero di   core / CPU. Il fatto che questi   le discussioni sono chiamati anche di pianificazione   può sembrare un po '   confondendo, ma dal punto di VM   vista sono. Da dello sviluppatore   punto di vista, sono i fili   che eseguire il codice Erlang . Il   numero S può essere controllata con   l'opzione + S alla riga di comando Erl.

     

Inoltre regolamento, ci sono una serie   dei cosiddetti "Async Threads". Quello è   una piscina filo che viene utilizzato da I / O   processi chiamato collegati nei conducenti, di   reagire per selezionare / sondaggio ecc   numero di fili asynch è dinamico,   ma limitato dalla bandiera + A.

     

Così, i 11 fili che si vedono in un   dual-core può essere 2 schedulatori e 9   discussioni asincrone. Per esempio.

     

Per saperne di più sulle bandiere qui .

Altri suggerimenti

processi Erlang non sono 'verdi' come thread sono verdi in Java. processi di Erlang sono strutture, che non condividono la memoria e vengono mantenuti da Erlang VM.

Può sembrare strano, ma questo documento potrebbe essere 'vecchio' (anche se bio dal 2007). E tutto è cambiato intorno a rilascio R13 quando siamo arrivati ??nuova gestione delle code di run-time (con roba bilanciamento dinamico ed altre golosità). Ecco alcuni presentazione da Ulf Wiger su di esso http: //ulf.wiger.net/weblog/2009/01/23/erlang-programming-for-multicore/

In sintesi, i processi sono completamente trasparenti e si può regolare il numero di code fase di esecuzione e di pianificazione, ma OS realizzazione non è integro. Non voglio speculare perché ci sono come 11 di fili ..

EDIT: ho sbagliato sul sistema operativo un po ':

  

+S Schedulers:SchedulerOnline

     

Imposta la quantità di fili di pianificazione per creare e thread scheduler per impostare in linea quando il supporto SMP è stato abilitato.

     

L'intervallo valido per entrambi i valori sono 1-1024. Se il sistema runtime Erlang è in grado di determinare la quantità di processori logici configurati e processori logici disponibili, Schedulatori saranno usati processori logici configurato e SchedulersOnline saranno usati processori logici disponibili; altrimenti, i valori predefiniti saranno 1. Scheduler possono essere omesse se non :SchedulerOnline e viceversa è. La quantità di utilità di pianificazione on-line può essere modificata in fase di esecuzione tramite erlang:system_flag(schedulers_online, SchedulersOnline) .

     

...

     

Questo flag verrà ignorata se l'emulatore non ha il supporto SMP abilitato (vedere la -smp bandiera).

da qui: http://www.erlang.org/doc/man/ erl.html

EDIT2: Interessante discussione su Erlang-domanda mailing list sui pro ei contro di molte macchine virtuali vs molte utilità di pianificazione. Purtroppo è anche a partire dal 2008 e non può essere cumulabile con enormi miglioramenti nelle nuove versioni di OTP. http://www.erlang.org/ cgi-bin / ezmlm-cgi 4:? MSS: 38165: 200809: nbihpkepgjcfnffkoobf

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top