2015-05-26 11 views

risposta

14

Sì. Per impostazione predefinita, Erlang avvia uno scheduler (thread del sistema operativo) per ogni CPU e tenta di distribuire il carico in modo uniforme tra gli scheduler. Tuttavia, non è garantito che i quattro processi finiscano per essere elaborati in quattro diverse CPU, perché di solito ci sono molte più cose che accadono in parallelo. Se vuoi sapere quanti programmatori Erlang ha avviato, fai partire iex (o erl).

~$ iex 
Erlang/OTP 17 [erts-6.4] [source] [64-bit] [smp:8:8] [async-threads:10] [hipe] [kernel-poll:false] [dtrace] 
... 

Ad esempio, il mio computer ha una CPU con 8 core. Nella prima riga dell'output, puoi vedere la configurazione corrente. Dalla parte [smp:8:8], è possibile vedere che SMP è configurato con 8 scheduler, 8 dei quali sono in linea. Il numero di schedulatori/thread può essere sostituito con the +S flag.

+ S Scheduler: SchedulerOnline

Imposta il numero di thread di pianificazione per creare e thread scheduler per impostare in linea quando il supporto SMP è stato abilitato. Il valore massimo per entrambi i valori è 1024. Se il sistema di runtime Erlang è in grado di determinare la quantità configurata e processori logici disponibili, gli Utilità di pianificazione verranno configurati automaticamente sui processori logici configurati, e SchedulersOnline verranno automaticamente assegnati ai processori logici; in caso contrario, i valori di default sarà 1. [...]

Il numero di utilità di pianificazione online può anche essere modificato in fase di esecuzione tramite :erlang.system_flag(:schedulers_online, n). Tuttavia, vorrei sconsigliarti di modificare i valori predefiniti a meno che non ti imbatti in un problema specifico.

+0

Erlang e OTP in Action trattano le basi di questo molto bene in uno dei primi capitoli. http://www.amazon.com/Erlang-OTP-Action-Martin-Logan/dp/1933988789 – jjbohn

+0

Modificato la mia risposta per fornire maggiori dettagli su come introspezionare la configurazione corrente dello scheduler e collegamenti alla documentazione di Erlang. –

6

Bene, l'elisir VM è semplicemente la VM di Erlang, che pianifica in che modo i processi generati vengono assegnati alla CPU della macchina. Non hai il controllo diretto AFAIK. Tuttavia è possibile vedere come i 4 scheduler vengono occupati all'interno della VM utilizzando la visualizzazione dei Grafici emettendo :observer.start() prima di eseguire il proprio codice. Ho trovato che sembra fare un lavoro abbastanza ragionevole. Per un controllo di realtà è anche possibile eseguire top su un sistema operativo Linux. Questo può mostrare quanta parte di ciascuna CPU viene effettivamente utilizzata: prova a premere 1 in alto da una console diversa sulla stessa macchina.

Problemi correlati