2013-10-02 18 views
6

Capisco come funziona un processo. E capisco come implementare comportamenti OTP come gen-server, ecc.Erlang: OTP vs spawn

Ma non mi è chiaro quando avrei scelto un approccio rispetto all'altro.

Ad esempio, Cesarini et. al., in Erlang Programming, implementare il server database su p 240 creando un processo, scrivendo una funzione loop, ecc. Il client di chat di Joe Armstrong su p 196 in Programming Erlang genera anche un processo.

Perché questi non dovrebbero essere implementati meglio come gen-server OTP? È per scopi educativi? O ci sono motivi tecnici validi?

In altre parole, quali regole mi guideranno per implementare un approccio rispetto all'altro?

Molte grazie.

risposta

7

Nei due esempi precedenti, semplice ha generato processi sono preferiti per scopi didattici: questo è più semplice da spiegare, questi autori non devono spiegare OTP a trasmettere quello che vogliono insegnare, ed è importante in ogni caso da capire il concetto di un processo in Erlang. Anche in un'applicazione reale che segue le regole OTP, non tutti i processi sono implementati con comportamenti OTP e inseriti in una struttura di supervisione.

La regola generale è piuttosto semplice. Stabilire se si desidera seguire i principi di progettazione OTP esaminando cosa comporta (modifiche al codice, tolleranza d'errore, ecc.) O se si intende integrare con il codice OTP compatibile. Seguire i principi OTP se si desidera una delle caratteristiche che porta ed evitare di reinventare la ruota.

Se attenersi a principi di OTP, e quindi utilizzare gen_* comportamenti, si dovrebbe fare un semplice uova per qualsiasi processo di breve durata, che non ha bisogno di essere sorvegliato o in codice aggiornato. Non deve vivere più a lungo del tempo necessario per distribuire un rilascio (in caso contrario sarebbe comunque necessario il soft_purge). Tutti gli altri processi devono essere inseriti nell'albero di supervisione e probabilmente implementare un comportamento gen_ *.