什么是Erlang节点?
问题描述:
我看到约二郎一本书的定义:什么是Erlang节点?
节点是包含 完整的虚拟机都有自己的地址空间和自己的一套 过程的自包含的Erlang系统。
但是这给我提出了更多的问题。
什么是自包含的Erlang系统?
作为一个例子,我是通过去终端并运行erl shell
来产生一个新节点吗?我是否打开多个节点并打开多个终端并分别运行erl shell
?
是否像上面打开的贝壳无论如何相互关联或默认情况下是完全隔离?如果这些是不同的节点,那么我是否会将这种方法作为分布式编程对待,并且应该深入研究该主题,以便我想单独运行并停止进程,然后将它们连接起来?
答
在终端2中,与另一种启动二郎:
节点是运行Erlang虚拟机的一个实例。如果您在Linux上并列出了进程,则每个节点都会有一个进程。
这意味着当您使用erl
在终端上启动虚拟机时,您每次都会看到一个新节点。
如果你正在编写一个应用程序,你通常不需要担心Erlang的分布式部分。一个节点可以处理数百万个Erlang进程,并且您可以通过在单个节点上工作来理解该模型。进程和节点是不同的概念,所以不要让他们感到困惑。
节点相互隔离,但Erlang有很多设备可以在它们之间进行通信。您不必编写任何代码来启用通信,这是一项内置功能。
这方面的一个简单的演示能够极其简单地进行:erl -sname hi
- 打开2个端子
- 在终端1中,用短名称开始二郎名称:
erl -sname hi2
-
外壳会告诉你什么是你的节点现在被称为:
端子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>
-
我现在可以得到的节点互相ping通:
([email protected])1> net_adm:ping('[email protected]'). pong
-
如果我列出
[email protected]
知道,其他节点将节点现在显示:([email protected])1> nodes(). ['[email protected]']
Erlang节点使用另一个守护进程来确定在一台机器上运行的Erlang节点。当节点正在寻找另一主机上的节点时,它会向主机的epmd实例请求连接所需的信息。