Названия стратегии перезапуска диспетчера OTP кажутся мне странными, возможно, потому, что я не являюсь носителем английского языка.
one_for_one
: когда один ребенок умирает, он перезапускает этого ребенкаone_for_all
: когда один ребенок умирает, он убивает всех остальных детей и перезапускает их по порядкуrest_for_one
: когда один ребенок умирает, он убивает всех детей, загруженных после этого мертвого ребенка, и перезапускает их по порядкуЯ пытаюсь понять эти названия стратегий, читая их как предложения, например "перезапустить one
ребенка for
one
смерть ребенка" .
Тогда либо one_for_all
, либо rest_for_one
кажутся мне перевернутым именем. ("restart one child for all children's death"
??)
Почему эти стратегии были названы так?
c.f. Раздел документации erlang one_for_all
имеет цифру, означающую «универсальный надзор». Это просто опечатка?
«Потому что, когда все за одного, значит один за всех». Брайан Адамс или три мушкетера
поэтому вы перезапускаете все, когда один из них выходит из строя, или перезапускаете отдых, когда один из них выходит из строя.
strategy() = one_for_all
| one_for_one
| rest_for_one
| simple_one_for_one
I will skip
simple_one_for_one
and focus on the other three.
Я считаю, что названия стратегий перезапуска происходят от Английская идиома «Один за всех, все за одного». Выражение выглядит как Старый.
one_for_one
: означает, что один запускается и заменяется вновь запущенным дочерним процессом.
one_for_all
: означает (из идиомы), что если один завершается, то мы (дети) все завершаем работу и начинаем снова.
rest_for_one
: если один из них выходит из строя, отдых также завершает работу и запускается снова. «Остальное» в этом случае относится ко всем дочерним элементам успешный (позади) в указанном стартовый заказ. Обратите внимание, что единственная разница между этим и приведенным выше - это соблюдение порядка старта.
Я предпочитаю думать о них как о «единой» стратегии (например, one_for_one
) и «полной» стратегии (например, one_for_all
и rest_for_one
). В большинстве случаев это сработает нормально.
Я понимаю, что one_for_all
происходит от старой идиомы «Один для всех». У меня вопрос, а почему другой не назван one_for_rest
? Это так сбивает с толку.
Да, я понимаю, что это будет происходить по той же схеме, что и другие. Честно говоря, не знаю. Единственная причина, по которой я могу думать, это то, что он единственный, кто учитывает порядок старта.
... и, чтобы быть последовательным, почему
rest_for_one
не называетсяone_for_rest
? Предлагаю изменить названия на:failed
,failed_and_after
,all
.