2010-08-02 7 views
10

Zwischen den Knoten wird die Nachricht über TCP/IP übergeben. Mit welchem ​​Mechanismus werden sie jedoch zwischen Prozessen weitergeleitet, die auf demselben Knoten ausgeführt werden? Wird in diesem Fall auch TCP/IP verwendet? Unix-Domain-Sockets? Was ist der Unterschied in der Leistung zwischen der Übergabe von Nachrichten zwischen "innerhalb von Knoten" und "zwischen Knoten"?Wie übergibt Erlang Nachrichten zwischen Prozessen auf demselben Knoten?

Antwort

14

durch welchen Mechanismus werden sie zwischen laufenden Prozesse weitergegeben der gleiche Knoten?

Da Erlang Prozesse auf demselben Knoten alle laufen in einem einzigen nativen Prozess — die BEAM-Emulator — Nachrichtenstrukturen in den Empfänger des Nachrichtenwarteschlange kopiert werden einfach sind. Die Nachrichtenstruktur wird kopiert und nicht einfach referenziert, und zwar für alle Standard-Funktions-Programmiergründe ohne Nebeneffekte.

Weitere Informationen finden Sie unter erts_send_message() in erts/emulator/beam/erl_message.c in den Erlang-Quellen. In R15B01 beginnen die für Ihre Frage relevantesten Bits bei Zeile 980 oder so mit dem Aufruf an erts_queue_message().

Wenn Sie mehrere BEAM-Emulatoren auf einer einzelnen physischen Maschine ausführen möchten, würde ich annehmen, dass Nachrichten zwischen ihnen auf dieselbe Weise gesendet werden wie zwischen verschiedenen physischen Maschinen. Es gibt wahrscheinlich keinen guten Grund, dies zu tun, da BEAM nun eine gute SMP-Unterstützung hat.

Was ist der Unterschied in der Leistung zwischen "zwischen Knoten" und "zwischen Knoten" Nachrichtenübergabe?

Ein einfacher Benchmark auf Ihrer tatsächlichen Hardware wäre nützlicher als anekdotische Beweise von anderen.

Wenn Sie jedoch allgemeine Regeln beachten möchten, beachten Sie, dass die Speicherbandbreiten in diesen Tagen around 20 GByte/sec sind und dass Sie wahrscheinlich keine Netzwerkverbindung schneller als 10 Gbit/s zwischen Knoten haben. Das bedeutet, dass es zwar viele Unterschiede zwischen Ihrer tatsächlichen Anwendung und jedem einfachen Benchmark gibt, den Sie ausführen oder finden, aber diese Unterschiede können wahrscheinlich keine Größenunterschiede in der Übertragungsrate überlagern.

Wenn Sie "nur" eine 1 Gbit/s Ende-zu-Ende-Netzwerkverbindung zwischen Knoten haben, werden Intranode-Übertragungen wahrscheinlich um mehr als zwei Größenordnungen schneller sein als Internode-Übertragungen.

6

„Alle Daten in Nachrichten zwischen Erlang Prozesse kopiert, mit Ausnahme von refc Binärdateien auf dem gleichen Erlang-Knoten.“:

http://erlang.org/doc/efficiency_guide/processes.html#id2265332

+0

Wenn TCP/IP als Transport verwendet wurde, würde die Nachricht sicherlich "kopiert" werden, aber sie könnten auch kopiert werden, wenn ein anderer Mechanismus verwendet wurde, also denke ich, dass dies die Frage löst. – mjs

+0

Alle Daten in Nachrichten zwischen Erlang-Prozessen auf demselben Erlang-Knoten werden in den Speicher kopiert. Außerdem werden Refc-Binärdateien zwischen Erlang-Prozessen auf demselben Erlang-Knoten geteilt. Es ist also viel schneller als TCP/IP. – hdima

+0

Hmm ... Meinst du Erlang Prozesse und Erlang Knoten in der ursprünglichen Frage? – hdima

Verwandte Themen