【发布时间】:2020-02-11 11:02:53
【问题描述】:
我想动态地将子级添加到 simple_one_for_one 主管。为此,我正在考虑使用make_ref() 创建一个子标识符并将引用保存在地图中。一旦孩子终止,参考将从地图中删除。这种情况下引用会被垃圾回收吗?
【问题讨论】:
-
为什么不使用 PID?
-
好吧,我会用pid。
我想动态地将子级添加到 simple_one_for_one 主管。为此,我正在考虑使用make_ref() 创建一个子标识符并将引用保存在地图中。一旦孩子终止,参考将从地图中删除。这种情况下引用会被垃圾回收吗?
【问题讨论】:
您不能通过 child_id() 引用 simple_one_for_one 主管的子级。这些主管只有一个child_spec(),并且他们所有的孩子都使用相同的规范,这意味着规范中的child_id() 被忽略。孩子们被他们的 pid 引用。所以start_child/2 函数不需要child_spec()(也不是child_id()),只有一个参数列表,terminate_child/2 需要pid() 而不是child_id()。所以你根本不需要生成引用。
但是,要回答您的问题:是的,引用是垃圾收集的。所有 Erlang 数据类型都是垃圾收集的。如果您真的想深入了解细节,有一些警告,但没有什么可真正担心的:
【讨论】: