Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Erlang otp gen_服务器';s信息、呼叫、广播消息队列?_Erlang_Message Queue_Gen Server - Fatal编程技术网

Erlang otp gen_服务器';s信息、呼叫、广播消息队列?

Erlang otp gen_服务器';s信息、呼叫、广播消息队列?,erlang,message-queue,gen-server,Erlang,Message Queue,Gen Server,在编写代码时,我会问自己应该使用哪种类型的消息call,应该使用哪种类型的消息info 在这个问题下面,另一个长期存在的疑问是info、cast、callmessage之间是否存在优先级差异?这3种消息是否共享同一队列?消息的优先级相同。快速查看gen_server.erl,您将发现接收所有数据的简单循环 loop(Parent, Name, State, Mod, hibernate, Debug) -> proc_lib:hibernate(?MODULE,wake_hib,[

在编写代码时,我会问自己应该使用哪种类型的消息
call
,应该使用哪种类型的消息
info


在这个问题下面,另一个长期存在的疑问是
info、cast、call
message之间是否存在优先级差异?这3种消息是否共享同一队列?

消息的优先级相同。快速查看gen_server.erl,您将发现接收所有数据的简单循环

loop(Parent, Name, State, Mod, hibernate, Debug) ->
    proc_lib:hibernate(?MODULE,wake_hib,[Parent, Name, State, Mod, Debug]);
loop(Parent, Name, State, Mod, Time, Debug) ->
    Msg = receive
          Input ->
            Input
      after Time ->
          timeout
      end,
    decode_msg(Msg, Parent, Name, State, Mod, Time, Debug, false).
关于:

gen_服务器在发生超时或接收到同步或异步请求(或系统消息)以外的任何其他消息时调用此函数


例如超时、tcp、udp、退出、系统信息和许多其他不适合handle_call或handle_cast的内容。

您的意思是什么时候使用
调用
以及什么时候使用
cast
info
用于超时或服务器接收到除
call
cast
以外的其他类型的消息时

要决定是使用
call
还是
cast
我想你应该问这样一个问题:“发件人是否希望等待此类邮件的答复?”。如果是,则使用同步的
调用
,如果不是,则使用异步的
强制转换

但我已经有一段时间没有使用Erlang了