OTP重启策略名称似乎很奇怪。为什么?

时间:2018-05-01 14:00:02

标签: erlang otp supervisor

抱歉,这不是技术问题。

OTP主管重启战略名称对我来说似乎很奇怪,可能是因为我不是母语为英语的人。

根据我的理解:

  • one_for_one:当一个孩子死亡时,它重新启动那个孩子
  • one_for_all:当一个孩子死亡时,它会杀死所有其他孩子并按顺序重新启动它们
  • rest_for_one:当一个孩子死亡时,它会杀死在那些死去的孩子之后启动的所有孩子,并按顺序重新启动它们

这是我的问题:

我试图通过将它们读作句子来理解这些策略名称,例如: “重启one孩子for one孩子的死” 然后,one_for_allrest_for_one对我来说似乎是倒置的名称。 ("restart one child for all children's death"?)

为什么这些策略的名字是这样的?

c.f。 The erlang docs one_for_all section有一个数字说“一对一的监督”。这只是一个错字吗?

2 个答案:

答案 0 :(得分:0)

“'因为什么时候一切都是为了所有人。”布莱恩亚当斯或三个火枪手

所以当一个人关机时你会全部重新启动,或者当一个人关机时你重新开始休息。

答案 1 :(得分:0)

There are:

    strategy() = one_for_all
               | one_for_one
               | rest_for_one
               | simple_one_for_one

我将跳过simple_one_for_one并专注于其他三个。

我相信重新启动策略的名称是从English idiom“一劳永逸,一劳永逸”获得的。该表达式看起来非常old

one_for_one:意思是一个被新启动的子进程取代。

one_for_all :(根据习惯用法)是指如果一个终止,那么我们(孩子) all 终止并重新开始。

rest_for_one:如果有人摔倒了,那么 rest 也会终止,然后重新开始。在这种情况下,“其余”是指指定的start order中所有成功的(后)子级。请注意,这与上面的唯一区别是遵守开始顺序。

我更喜欢将它们视为“单一”策略(即one_for_one)和“完整”策略(即one_for_allrest_for_one)。在大多数情况下,这可以正常工作。