0

我有一个名为“monitor_node”的进程层次结构。这些monitor_nodes中的每一个都由一个监督者监督。

现在,这些节点中的每一个都可能具有复杂的内部结构。意思是,它可能(或可能没有)具有正常运行所需的一些子流程。示例:发送保持活动消息的进程。到目前为止,我一直在使用普通的 spawn_link 来创建这些“内部”进程。

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

我的疑问是:

  1. 我将不得不监督相当数量的非常小的流程。我不确定这是否是一个好习惯。

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

我希望我没有让你太困惑。期待答案。

编辑:

此处讨论了一个非常相似(如果不相同)的问题(第 3 篇文章)。给出的解决方案与我给出的废话答案几乎相同。

4

1 回答 1

2

监事:

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

main_sup -> worker
main_sup -> attached_pool_sup

attached_pool_sup -> workers

main sup 是one_for_all,所以如果工人或池监督员死了,那么树就完成并被杀死。泳池监督员simple_one_for_one适合拥有数百或数千名工人。

在里面:

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

一个技巧是快速超时(从 init 中返回超时 0),然后在handle_info超时回调中处理额外的设置。这样你就不会阻止主要主管。当心这里的比赛!

于 2011-05-17T08:49:11.963 回答