Frage

Ich habe das Studium Erlang begonnen und die BEAM-Laufzeitumgebung faszinierend finden. Es ist allgemein festgestellt, dass in Erlang, Prozesse der Sprache gehören, anstatt das Betriebssystem (die Laufzeit bedeutet, was bedeutet, BEAM in diesem Fall). Dies sind die leichten, „grüne Prozesse“, dass Erlang wird immer berühmt ist. Es gibt weiter (auf Seite 5 von diesem Papier ), dass BEAM Anwendungen ein (1) OS-Thread pro CPU-Kern für die Zeitplanung und eine anderer OS-Thread für I / O. So frage ich mich:? Aus welchem ??Thread tun Führen Sie die CPU-Zyklen benötigt, um tatsächlich den Code Erlang kommen aus

Außerdem, wenn ich auf einer Dual-Core-Maschine betreiben ich erwarten würde - auf dem, was ich bisher gelesen habe - um zu sehen, drei (3) Fäden unter dem BEAM Prozess ausgeführt wird: zwei Disponenten (eine für jeden Kern) und ein I / O-Thread. Aber ich sehe, 10. Manchmal 11. Manchmal beginnt es bei 13 und, wie qualitativ hochwertige Verstärker, geht bis 11.

Ich bin verwirrt. Einsicht wird geschätzt.

War es hilfreich?

Lösung

Im Anschluss an @ user425720 Rat fragte ich meine Frage nach der erlang-Fragen LISTSERV. Es ist auch als ein Google-Gruppe . Kresten Krab Thorup von Trifork antwortete mir fast sofort. Mein Dank geht an Kreston zu gehen. Hier ist seine Antwort. (Parenthesen und Schwerpunkt sind meine.)

Hier ist AFAIK, das Basisszenario:

Erlang-Code wird ausgeführt in so viele „Green threads“, wie es Prozesse; Der Prozess Grenze von dem + P (Befehlszeile) Flag gesteuert.

Die grünen Fäden werden auf S abgebildet Fäden, wobei S die Anzahl der Kerne / CPUs. Die Tatsache, dass diese Themen sind auch Disponenten genannt kann etwas scheinen verwirrend, aber von dem VMs Punkt sehen sie sind. Aus den Entwicklern Sicht, sind sie die Fäden dass führen Sie Ihre erlang Code . Das Anzahl S kann mit gesteuert werden die + S Option zum erl Befehlszeile.

Zusätzlich hierzu gibt es eine Reihe der so genannte "Async Threads". das ist, ein Thread-Pool, der durch I / O verwendet wird, Prozesse genannt in Treiber verbunden ist, zu reagieren wählen / poll etc. Anzahl der Threads asynch ist dynamisch, sondern durch den + A-Flag begrenzt.

Also, die 11 Threads Sie auf einem absoluten Dual-Core 2 kann Schedulern sein und 9 async Threads. Zum Beispiel.

Lesen Sie mehr über die Flaggen hier .

Andere Tipps

Erlang Prozesse sind nicht 'grün' als Threads in Java-grün ist. Erlang Prozesse sind Strukturen, die nicht den gemeinsamen Speicher zu tun, und sie werden von Erlang VM gehalten.

Es mag seltsam klingen, aber dieses Papier könnte ‚alte‘ (obwohl Bio aus dem Jahr 2007). Alles rund um R13 Version geändert, wenn wir brandneue Handhabung von Laufzeit-Warteschlangen (mit dynamischen Auswuchten Sachen und anderen Leckereien) bekommen. Hier finden Sie einige Präsentation von Ulf Wiger darüber http: //ulf.wiger.net/weblog/2009/01/23/erlang-programming-for-multicore/

Um es zusammenzufassen, Prozesse vollständig transparent sind und Sie können Anzahl der Laufzeit Warteschlangen und Ablaufsteuerungen anpassen, aber OS Realisierung ist nicht intakt. Ich will nicht spekulieren, warum es wie 11 Threads ist ..

EDIT: Ich bin falsch über OS ein bisschen:

+S Schedulers:SchedulerOnline

Legt die Höhe der Scheduler-Threads zu erstellen und Scheduler-Threads online gesetzt, wenn SMP-Unterstützung aktiviert wurde.

Der gültige Bereich für beide Werte sind 1-1024. Wenn das Erlang-Laufzeitsystem ist in der Lage, die Menge an logischen Prozessoren konfigurierte und logische Prozessoren zur Verfügung, um zu bestimmen, wird Schedulers zu logischen Prozessoren konfiguriert default und SchedulersOnline wird auf logische Prozessoren Standard verfügbar; Andernfalls werden die Standardwerte sein, 1. Schedulers kann entfallen, wenn :SchedulerOnline nicht und umgekehrt. Die Menge des Disponenten Online kann zur Laufzeit über erlang:system_flag(schedulers_online, SchedulersOnline) geändert werden.

...

wird dieser Flag ignoriert werden, wenn der Emulator nicht SMP-Unterstützung nicht aktiviert (siehe -smp Flagge).

von hier: http://www.erlang.org/doc/man/ erl.html

EDIT2: Interessante Diskussion über erlang-Frage Mailingliste auf Vor-und Nachteile von vielen VMs vs viele Disponenten. Leider ist es ab 2008 auch und kann nicht mit großen Verbesserungen in neuen OTP Versionen gültig. http://www.erlang.org/ cgi-bin / ezmlm-cgi 4: mss: 38165: 200809: nbihpkepgjcfnffkoobf

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top