Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/EmptyTag/144.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Performance Erlang真的很快吗?因为它会导致很多内存拷贝?_Performance_Erlang - Fatal编程技术网

Performance Erlang真的很快吗?因为它会导致很多内存拷贝?

Performance Erlang真的很快吗?因为它会导致很多内存拷贝?,performance,erlang,Performance,Erlang,我是Erlang的新手,我了解该语言采用了actor模型设计,并创建了轻量级进程的概念,这是高并发编程的关键。但是,它也采用了函数式编程范式,这使得引用透明。这意味着赋值后不能更改变量。因此,我看到很多类似的函数,如: gb_trees:delete(Key, Tree1) -> Tree2 当我们从树中删除一个键时,我们确实创建了一个全新的树。这是否意味着,我们在引擎盖下克隆树1的所有剩余节点 如果是这样,这种语言真的适合高性能服务器开发吗 谢谢 对于树,您只需要复制实际更改的节点。假

我是Erlang的新手,我了解该语言采用了actor模型设计,并创建了轻量级进程的概念,这是高并发编程的关键。但是,它也采用了函数式编程范式,这使得引用透明。这意味着赋值后不能更改变量。因此,我看到很多类似的函数,如:

gb_trees:delete(Key, Tree1) -> Tree2
当我们从树中删除一个键时,我们确实创建了一个全新的树。这是否意味着,我们在引擎盖下克隆树1的所有剩余节点

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


谢谢

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

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

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

这些操作并不十分昂贵,而且对于大多数数据结构来说,冗余复制开销非常小。对于某些东西(例如,作为字节数组加载的大型图像),您可能需要


Erlang适合服务器系统不是因为它的速度,而是因为它的可靠性。对于大型系统来说,再增加十几台或一百台服务器并不是什么大不了的事,但如果你有一秒钟的停机时间来支付电话账单,这将是一件大不了的事。在美国,可能有数十万个电话没有计费——这显然比购买更多服务器的成本更高。

从单线程的角度来看,我发现Erlang与(例如)Java相比相对较慢,我猜这很大程度上是因为它的解释性质等。然而,它在多个CPU之间的伸缩性似乎要好得多(以我有限的经验)。因此,可以公平地说,复制使单线程应用程序稍微慢一些,但使普通程序员能够编写多线程应用程序,具有显著更高的吞吐量和更少的瓶颈。