2015-05-26 3 views

Antwort

14

Ja. Standardmäßig startet Erlang einen Scheduler (Betriebssystem-Thread) für jede CPU und versucht, die Last gleichmäßig auf die Scheduler zu verteilen. Es ist jedoch nicht garantiert, dass die vier Prozesse in vier verschiedenen CPUs verarbeitet werden, da normalerweise viel mehr parallel passiert. Wenn Sie wissen möchten, wie viele Scheduler Erlang gestartet hat, starten Sie einfach iex (oder erl, für die Angelegenheit).

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

Zum Beispiel hat mein Computer eine CPU mit 8 Kernen. In der ersten Zeile der Ausgabe sehen Sie die aktuelle Konfiguration. Aus dem Teil [smp:8:8] können Sie sehen, dass SMP mit 8 Schedulern konfiguriert ist, von denen 8 online sind. Die Anzahl der Scheduler/Threads kann mit the +S flag überschrieben werden.

+ S Schedulers: SchedulerOnline

Legt die Anzahl der Scheduler-Threads zu erstellen und Scheduler-Threads online gesetzt, wenn SMP-Unterstützung aktiviert wurde. Das Maximum für beide Werte ist 1024. Wenn das Erlang Laufzeitsystem die Anzahl der konfigurierten logischen Prozessoren und die verfügbaren logischen Prozessoren ermitteln kann, werden Scheduler standardmäßig auf logische Prozessoren konfiguriert, und SchedulersOnline wird standardmäßig auf logische Prozessoren verfügbar; andernfalls werden die Standardwerte sein 1. [...]

Die Zahl der Disponenten Online kann auch zur Laufzeit über :erlang.system_flag(:schedulers_online, n) geändert werden. Ich würde jedoch davon abraten, die Standardeinstellungen zu ändern, es sei denn, Sie stoßen auf ein bestimmtes Problem.

+0

Erlang und OTP in Aktion deckt die Grundlagen von diesem wirklich gut in einem der ersten Kapitel ab. http://www.amazon.com/Erlang-OTP-Action-Martin-Logan/dp/1933988789 – jjbohn

+0

Bearbeitete meine Antwort, um weitere Details zur Überprüfung der aktuellen Scheduler-Konfiguration und Links zur Erlang-Dokumentation zu geben. –

6

Nun, die elixir VM ist einfach die Erlang VM - die plant, wie erzeugte Prozesse der Maschinen-CPU zugewiesen werden. Sie haben keine direkte Kontrolle AFAIK. Sie können jedoch sehen, wie die 4 Scheduler innerhalb der VM beschäftigt sind, indem Sie die Visualisierung der Charts verwenden, indem Sie :observer.start() ausgeben, bevor Sie Ihren eigenen Code ausführen. Ich habe herausgefunden, dass es einen ziemlich vernünftigen Job zu tun scheint. Für einen Reality-Check können Sie auch top auf einem Linux-Betriebssystem ausführen. Dies kann zeigen, wie viel von jeder CPU tatsächlich verbraucht wird - versuchen Sie, 1 von einer anderen Konsole auf derselben Maschine zu drücken.

Verwandte Themen