【问题标题】:What is an Erlang node?什么是 Erlang 节点?
【发布时间】:2016-12-19 05:08:45
【问题描述】:

我在一本关于 Erlang 的书中看到了一个定义:

节点是一个独立的 Erlang 系统,包含一个 完整的虚拟机有自己的地址空间和自己的集合 进程。

但这向我提出了更多问题。

什么是自包含的 Erlang 系统?

例如,我是否通过转到终端并运行erl shell 来生成一个新节点?我是否通过打开多个终端并在每个终端中运行 erl shell 来打开多个节点?

像上面那样打开的 shell 是相互关联的还是默认情况下完全隔离的?如果这些是不同的节点,那么我是否应该将此方法视为分布式编程,是否应该深入研究该主题,以防我想独立运行和停止进程但然后将它们连接起来?

【问题讨论】:

    标签: erlang


    【解决方案1】:

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

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

    如果您正在编写一个应用程序,您通常不需要担心 Erlang 的分布式部分。一个节点可以处理数百万个 Erlang 进程,您可以通过在单个节点上工作来很好地理解模型。进程和节点是不同的概念,所以不要混淆它们。

    节点是相互隔离的,但是 Erlang 有很多工具可以在它们之间进行通信。您无需编写任何代码即可启用通信,这是一个内置功能。

    一个简单的演示可以非常简单地完成:

    1. 打开 2 个终端
    2. 在终端 1 中,使用短名称启动 Erlang:erl -sname hi
    3. 在终端 2 中,使用另一个名称启动 Erlang:erl -sname hi2
    4. shell 将显示您的节点现在被称为什么:

      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)
      
      (hi@kwong-mbp)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)
      (hi2@kwong-mbp)1>
      
    5. 我现在可以让节点互相 ping 通:

      (hi2@kwong-mbp)1> net_adm:ping('hi@kwong-mbp').
      pong
      
    6. 如果我列出了hi@kwong-mbp 知道的节点,那么现在会显示另一个节点:

      (hi@kwong-mbp)1> nodes().
      ['hi2@kwong-mbp']
      

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

    【讨论】:

      猜你喜欢
      • 2011-02-19
      • 1970-01-01
      • 2022-01-09
      • 2017-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-30
      • 1970-01-01
      相关资源
      最近更新 更多