什么是Erlang节点?

问题描述:

我看到约二郎一本书的定义:什么是Erlang节点?

节点是包含 完整的虚拟机都有自己的地址空间和自己的一套 过程的自包含的Erlang系统。

但是这给我提出了更多的问题。

什么是自包含的Erlang系统?

作为一个例子,我是通过去终端并运行erl shell来产生一个新节点吗?我是否打开多个节点并打开多个终端并分别运行erl shell

是否像上面打开的贝壳无论如何相互关联或默认情况下是完全隔离?如果这些是不同的节点,那么我是否会将这种方法作为分布式编程对待,并且应该深入研究该主题,以便我想单独运行并停止进程,然后将它们连接起来?

节点是运行Erlang虚拟机的一个实例。如果您在Linux上并列出了进程,则每个节点都会有一个进程。

这意味着当您使用erl在终端上启动虚拟机时,您每次都会看到一个新节点。

如果你正在编写一个应用程序,你通常不需要担心Erlang的分布式部分。一个节点可以处理数百万个Erlang进程,并且您可以通过在单个节点上工作来理解该模型。进程和节点是不同的概念,所以不要让他们感到困惑。

节点相互隔离,但Erlang有很多设备可以在它们之间进行通信。您不必编写任何代码来启用通信,这是一项内置功能。

这方面的一个简单的演示能够极其简单地进行:erl -sname hi

  • 在终端2中,与另一种启动二郎:

    1. 打开2个端子
    2. 在终端1中,用短名称开始二郎名称:erl -sname hi2
    3. 外壳会告诉你什么是你的节点现在被称为:

      端子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> 
      
    4. 我现在可以得到的节点互相ping通:

      ([email protected])1> net_adm:ping('[email protected]'). 
      pong 
      
    5. 如果我列出[email protected]知道,其他节点将节点现在显示:

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

    Erlang节点使用另一个守护进程来确定在一台机器上运行的Erlang节点。当节点正在寻找另一主机上的节点时,它会向主机的epmd实例请求连接所需的信息。