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
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.
„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
- 1. Gibt es in Erlang ein Werkzeug, um alle Nachrichten zwischen Prozessen zu generieren?
- 2. Sollten getrennte Erlang-Anwendungen dieselbe VM auf demselben Computer verwenden?
- 3. Erlang C Knoten bezogene Frage
- 4. erlang Knoten nicht
- 5. Priorisierung Erlang Knoten
- 6. Erlang: Start Slave-Knoten
- 7. Starten remote Erlang Knoten
- 8. Kommunikation zwischen Python-Prozessen
- 9. Kommunikation zwischen Prozessen auf verschiedenen Computern
- 10. Erlang: RPC zu einem Knoten mit Ausgabe auf diesem Knoten
- 11. Socket-Übergabe zwischen Prozessen
- 12. Kommunikation zwischen Prozessen
- 13. Sharing Threads zwischen Prozessen?
- 14. Wie greift erlang auf freigegebene Ressourcen zu?
- 15. Sind Erlang-Referenzen zwischen Knoten/VM-Neustarts eindeutig?
- 16. Wie pman auf einem Remote-Knoten in Erlang ausführen?
- 17. Wie kann ich Speicher zwischen Prozessen in MATLAB freigeben?
- 18. Benennen von Knoten in Erlang
- 19. Erlang: Wie Knoten aus Mnesia-Cluster entfernen
- 20. Erlang Nachrichtenschleifen
- 21. Sharing HDC zwischen verschiedenen Prozessen
- 22. Share Variable zwischen Prozessen - PHP
- 23. Erlang Nachbarsuche
- 24. Empfangen mehrerer Nachrichten in einem Erlang-Prozess
- 25. Python/Erlang: Was ist der Unterschied zwischen Twisted, Stackless, Greenlet, Eventlet, Coroutines? Sind sie Erlang-Prozessen ähnlich?
- 26. C# - WCF - Kommunikation zwischen Prozessen
- 27. Routing von Nachrichten an PIDs in Erlang
- 28. Ist es möglich, eine PostMessage zwischen Prozessen zu verfolgen?
- 29. Wie vertrauliche Daten zwischen Prozessen in Windows übertragen werden?
- 30. Python-Wörterbuch der Warteschlangen zwischen Prozessen
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
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
Hmm ... Meinst du Erlang Prozesse und Erlang Knoten in der ursprünglichen Frage? – hdima