文档说
make_ref() -> ref()
返回一个几乎唯一的引用。
返回的引用将在大约 2 82次调用后重新出现;因此它对于实际用途来说是独一无二的。
但我的眼睛告诉我,在 VM 重新启动之间,我可以轻松获得相同的 ref:
[~] erl
Erlang R14B04 (erts-5.8.5)
1> make_ref().
#Ref<0.0.0.33>
2> make_ref().
#Ref<0.0.0.37>
^C
[~] erl
Erlang R14B04 (erts-5.8.5)
1> make_ref().
#Ref<0.0.0.33>
那么,Erlang 的 Refs 有多独特呢?当标签在 mq 或 db 中持久存在并且可能由不同的 VM 会话生成时,它们是否适合用作唯一的“标签”生成器。
我知道 UUID 可以用于此。众所周知,pids() 是可重复的、可重用的,如果序列化然后从持久存储中加载,则绝不是唯一的。
问题是,什么是 refs()——更像是 UUID 还是更像 pids()?refs() 在节点之间是唯一的吗?重启之间?有没有关于这个话题的官方信息?