Erlang真的很快,因为它引发了很多内存复制吗?

Yan*_* Bo 5 erlang performance

我是Erlang的新手,我理解该语言采用了actor模型的设计,并创建了轻量级过程的概念,这是高并发编程的关键.但是,它也采用了函数式编程范式,它强加了参考透明度.这意味着在赋值后无法更改变量.所以,我看到很多类似的功能:

gb_trees:delete(Key, Tree1) -> Tree2
Run Code Online (Sandbox Code Playgroud)

当我们从树中删除一个键时,我们确实创建了一个全新的树.这是否意味着,我们在引擎盖下克隆Tree1的所有遗留节点?

如果是这样,这种语言真的适合高性能服务器开发吗?

谢谢 !

Ham*_*son 10

对于树,您只需要复制实际更改的节点.假设你有一棵树:

       A
      / \
     /   \
    B     C
         / \
        D   E
Run Code Online (Sandbox Code Playgroud)

如果delete_tree使用B作为参数调用方法,则需要复制的唯一节点是A,因为子树CDE仍然与操作之前相同.

此外,如果在操作后不使用Tree1并且仅使用生成的树,则编译器可以更改操作以直接修改树,这可能更快.

这些操作并不是非常昂贵,并且对于大多数数据结构而言,冗余复制开销非常小.对于某些事情(即,作为字节数组加载的大图像),您可能需要创造性的解决方案.

Erlang适用于服务器系统而不是它的速度,但它的可靠性.对于大型系统来说,增加另外十几台服务器并不是什么大不了的事,但如果您的电话计费停机时间为1秒,则这是一个大问题.在美国,这可能是数十万个未收费的电话 - 这显然比购买更多服务器的成本更高.