2012-10-05 17 views
5

Negli esempi forniti sul github Cowboy, e in alcuni degli altri esempi che ho trovato on-line, c'è un one-to -un supervisore che non sembra fare nulla. Credo addirittura di aver visto un esempio che ha il seguente commento, "come un vero supervisore non fa nulla".Qual è lo scopo del supervisore one-to-one in molti esempi di cowboy

Qual è lo scopo del modulo supervisore che sembra essere parte di così tanti esempi di cowboy?

Dall'esempio echo_get:

%% 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}}. 

risposta

6

Da erlang application behavior documentation:

start è chiamato all'avvio dell'applicazione e deve creare l'albero supervisione avviando supervisore superiore. Si prevede di restituire il pid del supervisore principale e un termine opzionale State, che per impostazione predefinita è []. Questo termine è passato così com'è.

Ha questo supervisore fittizio, quindi può chiamarlo alla fine della funzione di avvio here. Penso che non abbia scopo pratico se non quello di soddisfare questa condizione.

1

Non è necessario specificare tutti i figli gestiti da un supervisore all'avvio. Puoi aggiungerli/avviarli dinamicamente usando supervisor:start_child/2 e gestirli usando supevisor:restart_child/2, supervisor:terminate_child/2 e supervisor:delete_child/2. Ciò significa che anche se un supervisore non ha figli sin dall'inizio, non significa che sia solo un manichino.

Il commento che un supervisore reale "non fa nulla" molto probabilmente si riferisce al fatto che un supervisore che può solo i supervisori elabora e non svolge alcun lavoro come i processi di lavoro. O almeno questo dovrebbe significare!

+0

Non vedo alcuna prova che vengano richiamate le funzioni start_child/2, ecc. Sospetto che la risposta che cashmere @cashmere ha dato sia più probabile che sia il caso. Certo, potrei sicuramente mancare qualcosa ... – Jr0