2016-08-12 9 views
2

sehe ich eine Definition in einem der Bücher über Erlang:Was ist ein Erlang-Knoten?

Ein Knoten ist ein in sich geschlossenes System eine Erlang komplette virtuelle Maschine mit seiner eigenen Adressraum und eigenen Satz von Prozessen enthält.

Aber das wirft mehr Fragen auf mich.

Was ist ein unabhängiges Erlang-System?

Als Beispiel spawne ich einen neuen Knoten, indem Sie zum Terminal gehen und erl shell laufen? Öffnen Sie mehrere Knoten, indem Sie mehrere Terminals öffnen und erl shell in jedem ausführen?

Sind Schalen wie oben beschrieben miteinander verwandt oder sind sie standardmäßig vollständig isoliert? Wenn dies verschiedene Knoten sind, behandle ich diesen Ansatz als verteilte Programmierung und sollte tiefer in dieses Thema einsteigen, wenn ich Prozesse unabhängig ausführen und stoppen möchte, aber dann verbinden will?

Antwort

2

Ein Knoten ist eine Instanz der virtuellen Erlang-Maschine, die ausgeführt wird. Wenn Sie Linux verwenden und die Prozesse auflisten, gibt es für jeden Knoten einen Prozess.

Dies bedeutet, dass wenn Sie die vm auf dem Terminal mit erl starten, Sie jedes Mal einen neuen Knoten anstoßen.

Wenn Sie eine Anwendung schreiben, müssen Sie sich im Allgemeinen nicht um den verteilten Teil von Erlang kümmern. Ein Knoten kann Millionen von Erlang-Prozessen verarbeiten, und Sie können das Modell gut verstehen, wenn Sie an einem einzelnen Knoten arbeiten. Prozesse und Knoten sind unterschiedliche Konzepte, also verwirren Sie sie nicht.

Knoten sind voneinander isoliert, aber Erlang hat viele Möglichkeiten zur Kommunikation zwischen ihnen. Sie müssen keinen Code schreiben, um die Kommunikation zu ermöglichen, es ist eine eingebaute Funktion.mit einem kurzen Namen

  1. Open 2 Terminals
  2. In Terminal 1 starten Erlang:

    Eine einfache Demo dies kann sehr einfach durchgeführt werden erl -sname hi

  3. Im Terminal 2 starten Erlang mit einem anderen Name: erl -sname hi2
  4. Die Schale wird Ihnen zeigen, was Ihre Knoten jetzt genannt werden:

    Terminal 1:

    Erlang/OTP 18 [erts-7.1] [source] [64-bit] [smp:8:8] [async-threads:10] [hipe] [kernel-poll:false] [dtrace] 
    
    Eshell V7.1 (abort with ^G) 
    
    ([email protected])1> 
    

    Terminal 2:

    Erlang/OTP 18 [erts-7.1] [source] [64-bit] [smp:8:8] [async-threads:10] [hipe] [kernel-poll:false] [dtrace] 
    
    Eshell V7.1 (abort with ^G) 
    ([email protected])1> 
    
  5. Ich kann jetzt die Knoten sich gegenseitig pingen:

    ([email protected])1> net_adm:ping('[email protected]'). 
    pong 
    
  6. Wenn ich Liste der Knoten [email protected] kennt, der andere Knoten wird Jetzt angezeigt:

    ([email protected])1> nodes(). 
    ['[email protected]'] 
    

Erlang-Knoten verwenden einen anderen Daemon, um herauszufinden, welche Erlang-Knoten auf einer Maschine ausgeführt werden. Wenn ein Knoten nach einem Knoten auf einem anderen Host sucht, fragt er die epmd-Instanz des Host-Computers nach den für die Verbindung erforderlichen Informationen ab.