2016-08-12 2 views
2

내가 얼랑에 대한 책 중 하나에서 정의를 참조하십시오얼랭 노드 란 무엇입니까?

노드는 자신의 주소 공간과 프로세스의 자신의 세트와 완전한 가상 머신을 포함하는 독립적 인 얼랑 시스템입니다.

그러나 이것은 나에게 더 많은 질문을 제기합니다.

자체 포함 된 얼랑 시스템이란 무엇입니까?

예를 들어, 터미널로 이동하여 erl shell을 실행하여 새 노드를 생성합니까? 여러 개의 터미널을 열고 각각에 erl shell을 실행하여 여러 개의 노드를 열어 볼 수 있습니까?

위의 것처럼 여는 쉘은 서로 관련이 있거나 기본적으로 완전히 격리되어 있습니까? 이들 노드가 다른 경우이 접근법을 분산 프로그래밍으로 취급해야합니까? 프로세스를 독립적으로 실행 및 중지 한 다음 연결하려면 해당 주제를 더 깊이 파고 있어야합니다.

답변

2

노드는 실행중인 얼랭 가상 머신의 한 인스턴스입니다. Linux를 사용하고 있고 프로세스를 나열하면 각 노드마다 하나의 프로세스가 있습니다.

즉, erl을 사용하여 터미널에서 VM을 시작하면 매번 새 노드가 시작됩니다.

응용 프로그램을 작성하는 경우 일반적으로 Erlang의 분산 부분에 대해서는 아직 걱정할 필요가 없습니다. 하나의 노드가 수백만 개의 Erlang 프로세스를 처리 할 수 ​​있으므로 단일 노드에서 작업하면 모델을 잘 이해할 수 있습니다. 프로세스와 노드는 다른 개념이므로 혼동하지 마십시오.

노드는 서로 격리되어 있지만, 얼랭 (Erlang)은 서로 통신하기위한 많은 기능을 갖추고 있습니다. 통신을 가능하게하기 위해 코드를 작성할 필요가 없습니다. 내장 된 기능입니다.

이러한 간단한 데모는 상당히 간단하게 할 수있다 : 2 터미널 erl -sname hi

  • 가 서로 얼랑 시작 : 1 터미널

    1. 오픈 2 개 단자
    2. 는 짧은 이름 얼랑 시작 이름 : 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. 지금은 서로 핑 노드를 얻을 수 있습니다 :

      ([email protected])1> net_adm:ping('[email protected]'). 
      pong 
      
    5. 내가 [email protected]는, 다른 노드 것에 대해 알고있는 노드를 나열하는 경우 지금 표시 :

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

    Erlang 노드는 다른 데몬을 사용하여 Erlang 노드가 컴퓨터에서 실행중인 것을 파악합니다. 노드가 다른 호스트에서 노드를 찾으면 호스트 시스템의 epmd 인스턴스에 연결하는 데 필요한 정보를 묻습니다.

  • 관련 문제