2016-07-12 26 views

Antwort

9

Beide Funktionen beginnen neue gen_server Instanzen als Kinder des anrufenden Prozess, aber sie unterscheiden sich dadurch, dass die gen_server:start_link/3,4 atomar a beginnt gen_server Kind und Links sie an ihre Mutter Prozess. Verlinkung bedeutet, dass das Elternteil standardmäßig stirbt, wenn das Kind stirbt. Supervisors sind übergeordnete Prozesse, die Verknüpfungen verwenden, um bestimmte Aktionen auszuführen, wenn ihre untergeordneten Prozesse abnormal beendet werden, indem sie normalerweise neu gestartet werden.

Anders als die Verknüpfung im Fall gen_server:start_link beteiligt ist, gibt es keine Multi-Prozess-Aspekte in diesem Anruf beteiligt. Unabhängig davon, ob Sie gen_server:start oder gen_server:start_link, um ein neues gen_server zu starten, der neue Prozess hat eine einzelne Nachrichtenwarteschlange und es empfängt und verarbeitet diesen Nachrichten einen nach dem anderen. Es gibt nichts über gen_server:start_link, das dazu führt, dass sich der neue gen_server-Prozess anders verhält oder ausführt als beim Starten mit gen_server:start.

+0

Bitte siehe bearbeiten Steve. –

+1

Ich habe bereits beantwortet, was in Ihrer Bearbeitung ist. Wenn mehrere Prozesse Ihren "gen_server" gleichzeitig aufrufen, werden ihre Nachrichten in der Nachrichtenwarteschlange "gen_server" in die Warteschlange gestellt, und der "gen_server" verarbeitet diese Nachrichten nacheinander. –

4

Wenn Sie gen_server:start_link verwenden, wird der neue Prozess "Kind" des aufrufenden Prozesses - er ist Teil von Überwachungsbaum. Damit kann der aufrufende Prozess benachrichtigt werden, wenn der Prozess gen_server stirbt.

gen_server:start Verwendung außerhalb der Aufsicht Baum Prozess erzeugen.

Nizza Beschreibung der Aufsicht in Erlang ist hier: http://learnyousomeerlang.com/supervisors

+0

Wenn mein genserver von mehreren Threads aufgerufen wird, wird es sie alle auf einmal ausführen? oder schafft es Parallelität zwischen diesen Threads? –

+0

danke für die Antwort, können Sie mir auch darauf antworten? –

+4

Erlang verwendet den Begriff "thread" nicht. Es heißt "Prozess". Wenn mehrere Prozesse den gleichen gen_server aufrufen, werden sie in die Warteschlange gestellt und nacheinander abgearbeitet. Auf http://learnyousomeerlang.com/content gibt es sehr schönen Teil über OTP – Novakov