2016-08-12 7 views
2

私はアーランについての本のいずれかで定義を参照してください。Erlangノードとは何ですか?

ノードは、自身のアドレス空間と プロセスの独自のセットで 完全な仮想マシンを含む自己完結型のErlangのシステムです。

しかし、これにより私にはさらに多くの疑問が生じます。

自己完結型Erlangシステムとは何ですか?

例として、端末に移動してerl shellを実行して新しいノードを生成しますか?複数の端末を開き、それぞれにerl shellを実行して複数のノードを開きますか?

上記のように開いたシェルは、お互いに関連しているのですか、デフォルトで完全に分離されていますか?これらのノードが異なる場合は、このアプローチを分散型プログラミングと見なして、個別にプロセスを実行して停止したいが、そのプロセスを接続したい場合は、そのトピックを詳しく調べる必要があります。

答えて

2

ノードは、実行中のErlang仮想マシンの1つのインスタンスです。あなたがLinux上にいて、プロセスをリストするならば、各ノードに対して1つのプロセスが存在します。

これは、erlを使用して端末でvmを起動すると、毎回新しいノードが起動していることを意味します。

アプリケーションを作成している場合は、通常、Erlangの分散部分についてはまだ心配する必要はありません。 1つのノードで数百万のErlangプロセスを処理できます。単一のノードで作業することで、モデルを正常に理解できます。プロセスとノードは異なる概念なので、混乱させないでください。

ノードは互いに分離されていますが、Erlangはそれらの間で通信するための多くの機能を備えています。コミュニケーションを可能にするコードを書く必要はありません。それは組み込みの機能です。

本の簡単なデモが非常に簡単に行うことができる。

  1. 開く端末1において2つの端子
  2. 、短い名前でアーランを開始する:相互アーランを開始し、端末2ではerl -sname hi
  3. 名前:erl -sname hi2
  4. シェルは、あなたのノードが今と呼ばれるものを紹介します:

    ターミナル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> 
    

    ターミナル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. 私は今、ノードが互いにpingを実行するために取得することができます。

    ([email protected])1> net_adm:ping('[email protected]'). 
    pong 
    
  6. 私が知っている[email protected]ノードをリストした場合、他のノードになります今すぐ表示:

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

Erlangノードは別のデーモンを使用して、マシン上で動作しているErlangノードを特定します。ノードが別のホスト上のノードを探しているとき、ノードは接続に必要な情報をホスト・マシンのepmdインスタンスに要求します。

関連する問題