为什么Erlang需要一个虚拟机?

5

消息传递是Erlang的核心——“进程间的消息传递”。

但是,当涉及到Erlang的虚拟机概念时,仍然存在模糊不清的情况。

需要帮助吗?

1个回答

13

使用虚拟机的原因有几个:

  1. 演员

    Erlang试图比其运行的操作系统更加智能。创建操作系统进程是缓慢且昂贵的。Erlang有自己的轻量级进程、管理它们的调度程序以及将它们移动到不同的核心的方法。调度是抢占式的,这赋予了软实时属性(如果没有虚拟机,这将非常困难)。

  2. 内存管理

    在操作系统中分配内存可能很慢,这就是为什么Erlang可以预先分配内存并在内部进行管理的原因。这与数据结构是不可变的和垃圾回收有关。

  3. 指令集

    当您有预定义的指令集时,更容易进行优化。您还可以在VM之上创建其他语言,例如ElixirLisp Flavoured Erlang

也许还有很多其他原因,但这些是我从脑海中迅速写下的。Erlang 的主要目的是构建容错系统(可扩展性只是容错的副产品,正如Joe Armstrong所解释的)。限制用户在虚拟机中执行可以轻松控制执行,并提供容错能力。

在VM中创建进程也可以实现更便宜的消息传递。而且由于这是由Erlang管理的,您可以使用Erlang跟踪它们。您可以管理它们的生命周期,并在它们死亡时更容易地注意到。当需要时,它甚至允许一些“共享内存”数据与etsregister。而且您可以将编译的beam从一个系统移动到另一个系统。还有热代码重新加载等等...最终,您正在使用实际的Actor模型概念进行编程,而不是按计算机构建方式强加的概念。 - mpm
4
看到这些进程是Erlang进程,Erlang虚拟机在创建这些进程时比操作系统更加智能化。操作系统中的内存分配很慢,特别是在需要线程安全时,因此Erlang虚拟机在处理内存时要快得多。它有许多专门针对不同类型内存的内部内存管理器和收集器。基本上可以说Erlang虚拟机旨在运行Erlang,而操作系统则更加通用。 - rvirding
@rvirding:如果有需要补充的地方,请随意将其添加为答案。 - HIRA THAKUR

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接