나는 Erlang에서 새로운 학습자입니다. Erlang 변수의 수명주기에 대해 질문이 있습니다.gen_server의 주 생명주기는 무엇입니까
-module(wy).
-compile(export_all).
-export([init/1, handle_call/3, handle_cast/2, handle_info/2, terminate/2, code_change/3]).
-behaviour(gen_server).
-record(state, {id ,m, succ, pred}).
start(Name, M) ->
gen_server:start_link({local, Name}, ?MODULE, [Name, M], []).
init([Name, M]) ->
{ok, #state{id = Name, m = M}}.
handle_call({get_server_info}, _Frome, State) ->
{reply, State, State};
handle_call(_Request, _From, State) ->
Reply = ok,
{reply, Reply, State}.
handle_cast(_Msg, State) ->
{noreply, State}.
handle_info(_Info, State) ->
{noreply, State}.
terminate(_Reason, _State) ->
ok.
code_change(_OldVsn, State, _Extra) ->
{ok, State}.
get_server_info(ServerName) ->
gen_server:call(ServerName, {get_server_info}).
변수 "국가"수명주기는 무엇입니까 Erlang gen_server comunication에서
는참조?
변수 "State"가 handle_call 및 handle_cast에서 재사용되는 것을 볼 수 있습니다. 우선,이 "상태"는 init() 함수 "#state{id = Name, m = M}"
에서 초기화되는 동일한 상태입니까?
그렇다면 "상태"가 전역 변수입니까? 이 "국가"는 언제 파괴 될 것입니까?
얼랭에는 전역 변수가 있습니까?
감사합니다. Brujo. 나는 한 가지 더 질문을하고있다. 호출, 캐스트, 정보, 다른 프로세스에서 동시에 상태를 설정하면 상태가 다른 프로세스의 모든 변경 사항을 캡처합니까? cast()가 값 A를 State로 설정하면, 동시에 다른 cast()는 값 B를 State로 설정합니다. 그 전에 State는 비어 있습니다. 값을 설정 한 후에 State, A, B 또는 AB에 저장 될 내용은 무엇입니까? @Brujo Benavides – Neil
그래, 내 코드에서 볼 수 있듯이 메시지가 비동기 적으로 서버에 도달하더라도 루프는 오직 한 시간 만 처리하고 각 콜백의 평가는 동시 적입니다 (즉, 코드가 반환 될 때까지 코드가 이동하지 않습니다. 'handle_ *'에서). 또한 명백하게 말하면,'gen_server : cast/2'는 상태를 설정하지 않고 서버 프로세스로만 메시지를 보냅니다. 이 예제에서는'cast (Server, Msg) -> Server처럼 보일 것입니다! {cast, Ms}. " "Mod : handle_cast/2 "가 평가 될 때 그 메시지가 우리의'loop' 내에 수신됩니다. –