2014-10-14 3 views

ответ

11

Есть несколько причин для использования виртуальной машины:

  1. Актеры

    Erlang пытается быть умнее операционной системы он работает. Создание процессов ОС происходит медленно и дорого. У Erlang есть свои собственные световые процессы, планировщик, который управляет ими, и означает перемещать их между ядрами. scheduling является упреждающим, что дает мягкие свойства в режиме реального времени (это было бы очень трудно обойтись без виртуальной машины)

  2. управления памятью

    Распределение памяти в ОС может быть медленным, поэтому Erlang может заранее выделить память и управлять им внутренне. Он связан с неизменными структурами данных и garbage collecting.

  3. Набора команд

    Если у вас есть предопределенный набор инструкций, это легче сделать оптимизации. Вы также можете создавать другие языки поверх VM, например Elixir или Lisp Flavoured Erlang.

Есть, вероятно, много и много других причин, но те, которые я быстро написал с головы. Основная цель Erlang - создание отказоустойчивых систем (предмет масштабируемости является лишь побочным продуктом отказоустойчивости как Joe Armstrong explained). Было бы лучше «ограничить» пользователя виртуальной машиной, где выполнение можно легко контролировать и дать пользователю отказоустойчивость взамен.

+0

Создание процессов в виртуальной машине также позволяет более дешево передавать сообщения. И поскольку это управляется Erlang, вы можете проследить тех, кто использует Erlang. Вы можете управлять своей жизнью и замечать (проще), когда они умирают. И даже позволяет некоторым данным «разделяемой памяти» с 'ets' и' register', когда вам это нужно. И вы можете перемещать скомпилированную систему форм 'beam' в систему. И перезагрузка горячего кода. И многое другое ... В конце концов вы программируете в реальных концепциях модели актера, а не в понятиях, наложенных способом построения компьютера. – mpm

+4

Увидев процессы ** erlang **, процессы erlang VM могут быть и намного умнее, чем ОС при создании этих процессов. Распределение памяти в ОС происходит медленно, особенно когда она должна быть потокобезопасной, поэтому erlang VM намного быстрее обрабатывает память. Существует множество менеджеров внутренней памяти и сборщиков, специально предназначенных для разных типов памяти. В основном это сводится к тому, что виртуальная машина erlang нацелена на запуск erlang, в то время как ОС намного более общая. – rvirding

+0

@rvirding: не стесняйтесь добавлять это как ответ, если есть какие-то пункты, которые нужно добавить. –