2016-08-12 4 views
2

я вижу определение в одной из книг о Erlang:Что такое узел Erlang?

узлом является самодостаточной системой Erlang, содержащей полной виртуальной машины с собственным адресным пространством и собственным набором процессов.

Но это вызывает больше вопросов для меня.

Что такое автономная система Эрланг?

В качестве примера я создаю новый узел, перейдя на терминал и запустив erl shell? Открывать несколько узлов, открывая несколько терминалов и запуская erl shell в каждом?

Открыты ли раковины, как указано выше, так или иначе связаны друг с другом или они полностью изолированы по умолчанию? Если это разные узлы, то я рассматриваю этот подход как распределенное программирование и должен копать глубже в этой теме, если я хочу запускать и останавливать процессы самостоятельно, а затем подключать их?

ответ

2

Узел - это один экземпляр виртуальной машины Erlang. Если вы работаете в Linux и перечисляете процессы, для каждого узла будет один процесс.

Это означает, что при запуске vm на терминале с использованием erl вы каждый раз смотрите на новый узел.

Если вы пишете приложение, вам пока не нужно беспокоиться о распределенной части Erlang. Один узел может обрабатывать миллионы процессов Erlang, и вы можете отлично понимать модель, работая на одном узле. Процессы и узлы - это разные понятия, поэтому не путайте их.

Узлы изолированы друг от друга, но у Erlang есть много возможностей для общения между ними. Вам не нужно писать код для включения связи, это встроенная функция.

Простой демонстрационный пример это можно сделать чрезвычайно просто:

  1. Открыть 2 клеммы
  2. В терминале 1, начать Erlang с коротким названием: erl -sname hi
  3. В терминале 2, начинают Erlang с другим имя: erl -sname hi2
  4. оболочка покажет вам, что ваши узлы теперь называются:

    Терминал 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> 
    
  5. теперь я могу получить узлы пинговать друг друга:

    ([email protected])1> net_adm:ping('[email protected]'). 
    pong 
    
  6. Если я список узлов [email protected] знает о, а другой узел будет теперь отображаются:

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

Узлы Erlang используют другой демон, чтобы выяснить, какие узлы Erlang работают на машине. Когда узел ищет узел на другом хосте, он запрашивает экземпляр epmd хост-компьютера для информации, необходимой для подключения.

Смежные вопросы