Process 主管子对象与普通生成链接

Process 主管子对象与普通生成链接,process,erlang,spawn,erlang-supervisor,Process,Erlang,Spawn,Erlang Supervisor,我有一个称为“监控节点”的过程层次结构。每个监控器_节点都由一个监控器进行监控 现在,这些节点中的每一个都可能有一个复杂的内部结构。也就是说,它可能(也可能不)有一些子流程是它正常运行所必需的。示例:进程发送保持活动状态消息。到目前为止,我一直在使用普通的spawn_链接来创建这些“内部” 过程 然而,我已经意识到,在monitor_节点的init函数中生成它们有时会导致该函数失败(因此整个supervisor树都会失败)。我的问题是:将这些内部流程附加到主管树是否是一个好的解决方案?我正在考虑

我有一个称为“监控节点”的过程层次结构。每个监控器_节点都由一个监控器进行监控

现在,这些节点中的每一个都可能有一个复杂的内部结构。也就是说,它可能(也可能不)有一些子流程是它正常运行所必需的。示例:进程发送保持活动状态消息。到目前为止,我一直在使用普通的spawn_链接来创建这些“内部” 过程

然而,我已经意识到,在monitor_节点的init函数中生成它们有时会导致该函数失败(因此整个supervisor树都会失败)。我的问题是:将这些内部流程附加到主管树是否是一个好的解决方案?我正在考虑将monitor_节点更改为监督其内部流程的主管

我的疑问是:

  • 我必须监督相当数量的非常小的流程。我不确定这是否是一个好的做法

  • 我可能事先不知道给定的“内部”流程是一个简单的流程,或者有一些内部结构(也会产生其他流程)。如果是后者,那么我可能应该将这些“内部”流程附加到主管树

  • 我希望我没有把你弄糊涂。期待答案

    编辑:

    一个非常相似(如果不是相同的话)的问题是讨论(第三篇文章)。给出的解决方案与我给出的垃圾答案几乎相同。

    主管: 这里有一个技巧,包括使用两个主管。你的树是这样的:

    main_sup -> worker
    main_sup -> attached_pool_sup
    
    attached_pool_sup -> workers
    
    主sup是“一对一”的,因此如果工人或池主管死亡,则树将被删除。池管理器是一个简单的一对一的管理器,适用于成百上千的工人

    初始化: 不要在init回调中做太多工作。主管将等待初始化完成,如果超时时间超过正常时间,您可以设置超时时间(在您的情况下可以增加超时时间)


    一个技巧是快速超时(从init返回超时为0),然后在
    handle\u info
    timeout回调中处理其他设置。这样你就不会妨碍主管了。注意这里的比赛

    谢谢你的回答!我假设
    附加的\u pool\u sup
    将负责监督我在问题中提到的“内部”流程?好的。因此,在这种情况下,对于每个内部进程,我的
    monitor\u node:init
    函数必须在
    attached\u pool\u sup
    上调用
    supervisor:start\u child
    。我说得对吗?如果是,它会不会再次使
    init
    函数复杂化?