Verwendet der Launch neuer Prozesse alle CPU-Kerne in Elixir

7

Angenommen, ich bin auf einem 4-Kern-CPU-Rechner.

Wenn ich Folgendes in meiner Elixier-VM ausführe:

%Vor%

Verwendet dies alle 4 Kerne meiner Maschine. Einer von jedem der rechenintensiven Prozesse?

    
User314159 26.05.2015, 02:41
quelle

2 Antworten

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 ).

%Vor%

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 dem +S Flag außer Kraft gesetzt werden.

  

+ S Scheduler: SchedulerOnline

     

Legt die Anzahl der Scheduler-Threads zum Erstellen und Scheduler-Threads fest   online setzen, wenn die SMP-Unterstützung aktiviert wurde. Das Maximum für beide   Die Werte sind 1024. Wenn das Erlang-Laufzeitsystem den   Anzahl der konfigurierten logischen Prozessoren und logische Prozessoren   verfügbar, Scheduler werden standardmäßig auf logische Prozessoren konfiguriert,   und SchedulersOnline wird standardmäßig auf verfügbare logische Prozessoren gesetzt;   Andernfalls sind die Standardwerte 1. [...]

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

    
Patrick Oscity 26.05.2015, 05:23
quelle
6

Nun, die Elixier-VM ist einfach die Erlang-VM - die festlegt, 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 Diagramme 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 eine Realitätsprüfung können Sie top auch 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.

    
GavinBrelstaff 26.05.2015 05:14
quelle

Tags und Links