簡體   English   中英

什么是Erlang節點?

[英]What is an Erlang node?

我在其中一本關於Erlang的書中看到了一個定義:

節點是一個獨立的Erlang系統,包含一個完整的虛擬機,它有自己的地址空間和自己的一組進程。

但這給我帶來了更多問題。

什么是獨立的Erlang系統?

舉個例子,我是通過轉到終端並運行erl shell來生成一個新節點嗎? 通過打開多個終端並在每個終端中運行erl shell ,我可以打開多個節點嗎?

如上所述打開的外殼是否相互關聯或默認情況下是否完全隔離? 如果這些是不同的節點,那么我是否將此方法視為分布式編程,並且應該深入研究該主題,以防我想獨立運行和停止進程,然后連接它們?

節點是運行的Erlang虛擬機的一個實例。 如果你在linux上並且列出了進程,那么每個節點都會有一個進程。

這意味着當您使用erl在終端上啟動vm時,您每次都在盯着一個新節點。

如果您正在編寫應用程序,通常不需要擔心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實例請求連接所需的信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM