- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
对于何时何地优先使用 erlang:make_ref/0
而不是 erlang:unique_integer/0,1
或相反,是否有任何规则?
make_refs 上的大多数示例似乎都围绕消息或请求。在这些情况下,引用的生命周期很短,make_refs 可以轻松换成 unique_integer。
在速度或保证方面有区别吗?在尝试识别将持久保存和/或与其他系统交换的长生命周期对象或数据时,是否应该优先选择另一个?
最佳答案
unique_integer([monotonic])
需要跨调度程序同步,因此它们比非单调 unique_integer
或 make_ref
慢。
非单调的 unique_integer
和 make_ref
使用类似的方式构造它们自己,为每个调度程序使用一个独占的池。但是,unique_integer
池始终以相同的值开始,而引用池使用当前时间作为种子。
此外,unique_integer
的保证只与当前节点有关。你可以连续多次运行 erl -eval 'io:format("~p", [erlang:unique_integer()]),init:stop().'
你会看到重复值。因此,如果您有一个集群,则整数可能不是唯一的。
另一方面,由于引用包括创建它们的节点,因此它们在集群中连接的节点中是唯一的。
当使用持久化数据时,您需要考虑可能的 ERTS 重启,因此您无法及时保证唯一性。尽管使用引用可能就足够了(因为我已经表明 unique_integer
在考虑节点重启时不够强大),也许您应该使用不同的策略,例如让持久层为您创建 id当您存储数据时(MySQL 中的 AUTOINC)。
但是您可以根据需要混合搭配这些。您可以让每个节点在启动时从持久层中提取一个唯一的整数(我们称之为 node-id
),并将其与 unique_integer
组合成一个更大的整数。或者,您可以让每个节点生成自己的 node-id
,结合开始时间、强随机性和自己名称的哈希值……这完全取决于您的用例要求。
关于erlang:make_ref 与 erlang:unique_integer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72747127/
我需要为我的记录编号,以便我始终可以比较“后来”发生的事情和“之前”发生的事情。 为此我使用了 unique_integer 函数: Tag = erlang:unique_integer([mono
对于何时何地优先使用 erlang:make_ref/0 而不是 erlang:unique_integer/0,1 或相反,是否有任何规则? make_refs 上的大多数示例似乎都围绕消息或请求。
对于何时何地优先使用 erlang:make_ref/0 而不是 erlang:unique_integer/0,1 或相反,是否有任何规则? make_refs 上的大多数示例似乎都围绕消息或请求。
我是一名优秀的程序员,十分优秀!