gpt4 book ai didi

erlang - 在初始化之前向 gen_server 发送消息

转载 作者:行者123 更新时间:2023-12-02 06:01:24 37 4
gpt4 key购买 nike

我是 erlang 新手,我有以下代码:

-module (test_srv).
-behaviour (gen_server).
-export ([start_link/0, init/1, handle_info/2]).

start_link() ->
gen_server:start_link(?MODULE, [], []).

init([]) ->
self() ! asdasd,
{ok, new_state}.

handle_info(Msg, State) ->
io:format("server got ~p , now state is ~p~n", [Msg, State]),
{noreply, State}.

我在 erl shell 中测试:

1> {_, P} = test_srv:start_link().
server got asdasd , now state is new_state

问题是,当服务器未初始化且未就绪时向服务器发送消息时,gen_server 如何处理该消息?我有以下猜测:

  1. gen_server 立即处理消息,并将消息发送到 handle_info 回调,但会在 init 回调中丢失初始化状态

  2. gen_server 如果服务器未初始化则存储消息,服务器初始化后发送消息。

我想知道 erlang 或 gen_server 如何处理这个问题?处理消息的原理是什么?

最佳答案

我猜是server is not initialised你的意思是 init 的其余部分正在执行的函数。在这种情况下,你的第二个猜测是正确的。保证handle_info将在之后 init 执行已经回来了。自 gen_server是一个进程,并且您已经在执行 init ,从 init 发送给自身的消息仅由 gen_server 处理之后init已执行完毕。

关于erlang - 在初始化之前向 gen_server 发送消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40034601/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com