[英]What is an Erlang node?
我在其中一本關於Erlang的書中看到了一個定義:
節點是一個獨立的Erlang系統,包含一個完整的虛擬機,它有自己的地址空間和自己的一組進程。
但這給我帶來了更多問題。
什么是獨立的Erlang系統?
舉個例子,我是通過轉到終端並運行erl shell
來生成一個新節點嗎? 通過打開多個終端並在每個終端中運行erl shell
,我可以打開多個節點嗎?
如上所述打開的外殼是否相互關聯或默認情況下是否完全隔離? 如果這些是不同的節點,那么我是否將此方法視為分布式編程,並且應該深入研究該主題,以防我想獨立運行和停止進程,然后連接它們?
節點是運行的Erlang虛擬機的一個實例。 如果你在linux上並且列出了進程,那么每個節點都會有一個進程。
這意味着當您使用erl
在終端上啟動vm時,您每次都在盯着一個新節點。
如果您正在編寫應用程序,通常不需要擔心Erlang的分布式部分。 一個節點可以處理數百萬個Erlang進程,您可以通過在單個節點上工作來理解該模型。 進程和節點是不同的概念,所以不要讓它們混淆。
節點彼此隔離,但Erlang有許多用於它們之間通信的工具。 您不必編寫任何代碼來啟用通信,它是內置功能。
一個簡單的演示可以非常簡單地完成:
erl -sname hi
erl -sname hi2
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>
我現在可以讓節點相互ping通:
(hi2@kwong-mbp)1> net_adm:ping('hi@kwong-mbp'). pong
如果我列出了hi@kwong-mbp
知道的節點,那么另一個節點現在將顯示:
(hi@kwong-mbp)1> nodes(). ['hi2@kwong-mbp']
Erlang節點使用另一個守護進程來確定計算機上運行的Erlang節點。 當節點在另一台主機上查找節點時,它會向主機的epmd實例請求連接所需的信息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.