我是Erlang的新手,我了解Erlang语言采用了角色模型的设计,并创建了轻量级进程的概念,这是高并发编程的关键点。但是,它也采用了函数式编程范式,这种范式施加了引用透明性。这意味着变量在赋值后不能改变。所以,我看到了很多类似的函数,比如:
gb_trees:delete(Key, Tree1) -> Tree2当我们从树中删除一个键时,我们实际上创建了一个全新的树。这是否意味着,我们在幕后克隆Tree1的所有剩余节点?
如果是这样的话,这种语言真的适合高性能服务器开发吗?
谢谢!
发布于 2013-03-26 15:36:12
在树的情况下,您只需要复制实际更改的节点。假设你有一棵树:
A
/ \
/ \
B C
/ \
D E如果以B作为参数调用delete_tree方法,则需要复制的唯一节点是A,因为子树CDE仍然与操作前相同。
此外,如果您在操作后不使用Tree1,而只使用结果树,编译器可以更改操作以直接修改树,这可能会更快。
这些操作并不是非常昂贵,并且对于大多数数据结构来说,冗余复制开销非常小。对于某些事情(即加载为字节数组的大图像)您可能需要creative solutions。
Erlang适用于服务器系统,不是因为它的速度,而是因为它的可靠性。对于大型系统来说,再增加十几台或上百台服务器并不是什么大问题,但如果你有一秒钟的停机时间,比如电话账单,那就是一件大事。在美国,这可能是数十万次没有计费的电话--这显然比购买更多服务器的成本更高。
https://stackoverflow.com/questions/15630345
复制相似问题