5

我是Erlang的新手,我理解该语言采用了actor模型的设计,并创造了轻量级进程的概念,这是高并发编程的关键。但是,它也采用了函数式编程范式,它强加了引用透明性。这意味着分配后不能更改变量。所以,我看到很多类似的功能,比如:

gb_trees:delete(Key, Tree1) -> Tree2

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

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

谢谢 !

4

1 回答 1

10

在树的情况下,您只需要复制实际更改的节点。假设你有一棵树:

       A
      / \
     /   \
    B     C
         / \
        D   E

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

另外,如果在操作后不使用Tree1,只使用生成的树,编译器可以改变操作直接修改树,这样可能会更快。

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

Erlang 适用于服务器系统不是因为它的速度,而是因为它的可靠性。对于大型系统来说,再增加一打或一百台服务器并不是什么大问题,但如果你有 1 秒的停机时间来进行电话计费,那就是大问题了。在美国,这可能是数十万电话不计费——这显然比购买更多服务器的成本更高。

于 2013-03-26T07:36:11.717 回答