【发布时间】:2016-09-21 19:19:30
【问题描述】:
Elixir 的 Mix and OTP Guide Chapter GenServer 解释了如何使用 GenServer 实现注册服务器持有代理。
每个代理的 PID 都保存在一个映射中,其中键是客户端给出的代理名称,值是代理的 PID。
为了避免保留对死代理的引用,该指南建议使用 Process.monitor/1 监视新创建的代理,并通过添加一个名为 refs 的新映射稍微修改状态,其中包含引用(由 Process.monitor/1 返回的值)作为键和代理的名称作为值。它还展示了如何使用handle_info/2 处理监控消息以更新refs。
Process.monitor/1 接收一个 PID(例如#PID<0.66.0>)作为参数并返回一个引用(例如#Reference<0.0.0.551>)。 handle_info/2 捕获的 :DOWN 消息提供了 PID 和引用。
因为我们一直都知道这两个值:使用引用作为键比在 refs 中使用 PID 有什么好处?
【问题讨论】:
标签: elixir gen-server