le discussioni quale sistema operativo si abitua a macchina astratta di Erlang, FASCIO?
-
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.
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 tramiteerlang: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