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

时间:2013-03-26 06:00:11

标签: performance erlang

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

gb_trees:delete(Key, Tree1) -> Tree2

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

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

谢谢!

1 个答案:

答案 0 :(得分:10)

对于树,您只需要复制实际更改的节点。让我们说你有一棵树:

       A
      / \
     /   \
    B     C
         / \
        D   E

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

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

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

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