簡體   English   中英

Erlang持久數據結構

[英]Erlang persistent data structures

正如我所理解的,當您使用如下表達式創建新列表時, Erlang不會復制L1 ,它只復制H

L2 = [H|L1]

Erlang是否具有持久的dict數據結構(參見持久性數據結構 ),也就是說,當你在樹中添加/刪除/修改節點時,只有少數元素被復制(比如在Clojure中 )?

使用[H|T]構建列表時,您誤解了這種情況。 正如你所說, T沒有復制,但也不是H 所有這一切都是在T添加一個新的列表單元格,並引用H作為其頭部(尾部為T )。 使用列表時,創建的唯一位是實際列表單元格,而不是每個單元格中的數據。

使用dictdict發生同樣的情況。 dict修改(添加/刪除元素)時,僅修改實際的dict結構,而不是dict的實際數據。 它也很聰明,只能復制盡可能少的dict結構來進行修改。

所以,是的,Erlang具有持久的數據結構。 在這方面,clojure就像Erlang(我們在它之前很久)。

根據我的經驗,庫模塊的數據結構在性能或內存壓力變大時不會降低。

對於dict,它使用動態哈希表作為內部數據結構,並且工作基本上僅在完成修改的存儲桶上完成。

我還查看了gb_trees模塊,在那里我找到了評論:

行為是對數的(應該是)。

並且gb_trees通常非常快,所以我很確定沒有太多的復制正在進行。

通常,如果您使用Erlang之類的語言實現這些數據結構,則需要處理復制問題,因此無需擔心常規庫函數。


我重讀了有關持久性數據結構的文章:在本文的意義上,Erlang的數據結構是完全持久的,也是持久的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM