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.
fonte
2015-05-26 05:23:35
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
Modificato la mia risposta per fornire maggiori dettagli su come introspezionare la configurazione corrente dello scheduler e collegamenti alla documentazione di Erlang. –