Dav*_*ogt 0 erlang erlang-otp erlang-supervisor
我有一个主管结构,每个(TCP)连接需要一个主管。现在似乎每个主管都需要它自己的唯一名称,而该名称又需要是一个原子(至少这是我从错误消息中收集到的)。
一种解决方法是每次生成一个新原子,类似于erlang-questions list 中的建议。
现在我了解到原子永远不会被清理干净,所以有可能被太多的连接破坏,耗尽原子空间。这是如何正确完成的?
这里涉及两种类型的名称,进程的注册名称和主管子进程的标识符。
没有必要为每个主管进程都注册一个名称。启动主管进程有两个函数,supervisor:start_link/2和supervisor:start_link/3. start_link/3启动监督者并以给定的名称注册它,而start_link/2在不为其注册名称的情况下启动监督者。(如果该进程没有注册名称,则引用它的唯一方法是通过其 pid。)
至于监督者子进程的标识符,如果您有一个监督者将拥有无限数量的子进程(无论这些子进程是工人还是监督者),您通常会使用特殊的重新启动类型simple_one_for_one。这意味着,主管没有保留静态子规范列表(从init回调函数返回或与supervisor:start_child函数一起添加),而是具有单个“模板”子规范,该supervisor:start_child函数基于该模板创建“匿名”子规范。
| 归档时间: |
|
| 查看次数: |
148 次 |
| 最近记录: |