2012-10-05 8 views
5

W przykładach podanych na githubie kowbojskim oraz w niektórych innych przykładach, które znalazłem w Internecie, istnieje jeden-do -jednego przełożonego, który nic nie robi. Sądzę nawet, że widziałem przykład, który zawierał następujący komentarz: "jak prawdziwy przełożony nic nie robi".Jaki jest cel indywidualnego przełożonego w wielu przykładach kowbojskich?

Jaki jest cel modułu nadzoru, który wydaje się być częścią tak wielu przykładów kowbojów?

Z echo_get przykład:

%% Feel free to use, reuse and abuse the code in this file. 

%% @private-module(echo_get_sup). 
-behaviour(supervisor). 

%% API. 
-export([start_link/0]). 

%% supervisor. 
-export([init/1]). 

%% API. 
-spec start_link() -> {ok, pid()}. 
start_link() ->  
    supervisor:start_link({local, ?MODULE}, ?MODULE, []). 

%% supervisor. 
init([]) -> 
    Procs = [], 
    {ok, {{one_for_one, 10, 10}, Procs}}. 

Odpowiedz

6

Od Erlang application behavior documentation:

start nazywa się podczas uruchamiania aplikacji i powinny tworzyć drzewo nadzoru uruchamiając górną przełożonego. Oczekuje się, że zwróci pid najwyższego opiekuna i opcjonalny termin State, który domyślnie przyjmuje wartość []. Ten termin jest przekazywany jako-jest do zatrzymania.

Ma tego ślepego nadzorcę, więc może go wywołać na końcu funkcji startowej here. Myślę, że nie ma żadnego praktycznego celu, z wyjątkiem spełnienia tego warunku.

1

Nie trzeba określać wszystkich dzieci, którymi zarządza kierownik po uruchomieniu. Możesz dodawać/uruchamiać je dynamicznie za pomocą supervisor:start_child/2 i zarządzać nimi za pomocą supevisor:restart_child/2, i supervisor:delete_child/2. Oznacza to, że nawet jeśli osoba nadzorująca nie ma dzieci od początku, nie oznacza to, że jest to tylko manekin.

Uwaga, że ​​prawdziwy przełożony "nic nie robi" najprawdopodobniej wiąże się z faktem, że osoba nadzorująca może nadzorować tylko procesy i nie wykonywać żadnych prac, takich jak procesy robocze. A przynajmniej to powinno oznaczać!

+0

Nie widzę żadnych dowodów na to, że wywoływane są funkcje start_child/2 itd. Podejrzewam, że odpowiedź, którą dał cashmere @ cashmere, jest bardziej prawdopodobna. Oczywiście, mógłbym czegoś brakować ... – Jr0