【问题标题】:Why are ETS tables not garbage collected?为什么 ETS 表不被垃圾收集?
【发布时间】:2013-04-25 01:17:35
【问题描述】:

我正在学习 Erlang,所以这是一个提高我对 Erlang 设计选择的理解的问题。

为什么 ETS 数据结构(字典/树)与 Erlang 内置类型(列表/元组等)的处理方式如此不同。也就是说,它们不是垃圾收集的并且它们是可变的,因此所有使用它们的函数都有副作用。必须跟踪 ETS 表以避免内存泄漏似乎特别烦人。

Erlang 没有表现得更像列表的字典数据类型(不可变且被垃圾回收),这是有原因的吗?

是否假设 ETS 仅用于复制非常昂贵的大型数据库之类的结构,而对于其他任何事情,您使用 O(n) 元组列表作为键/值数据结构?

【问题讨论】:

    标签: data-structures erlang ets


    【解决方案1】:

    ETS 更像是一种类似数据库的工具,而不是一种数据结构。如果你想要一个键值数据类型,那么你可以使用dict module,它的行为类似于任何其他 Erlang 术语(垃圾收集、不可变等)。标准库中还实现了其他常见的数据结构,例如集合和平衡树。大多数时候,ETS 是不必要的。

    【讨论】:

    • 哦,我还没学过 dict。这很有意义。谢谢,
    猜你喜欢
    • 2010-12-19
    • 2014-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-05
    • 1970-01-01
    相关资源
    最近更新 更多