Что именно происходит, когда вызывается функция «порождение»? - PullRequest
0 голосов
/ 02 октября 2019

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

Ответы [ 2 ]

1 голос
/ 03 октября 2019

Я пытаюсь понять, как работает BEAM VM.

Подробности в бесплатной книге "The Beam Book" .

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

Это зависит.

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

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

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

0 голосов
/ 03 октября 2019

Нет, процессы не зависят друг от друга. Вот erlang документы

...