2012-05-21 90 views

回答

5

消息的優先級是相同的。快速查看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). 

關於handle_info

這個功能是通過一個gen_server當發生超時時,或當它接收比一個同步或異步請求(或系統消息)的任何其它的消息調用。

例如超時,tcp,udp,EXIT,系統信息和其他許多不適合handle_call或handle_cast的其他信息。

4

您的意思何時使用call以及何時使用castinfo用於超時或當服務器接收到callcast以外的其他類型的消息時。

要決定是否使用callcast我想你應該問一個問題「發件人是否想等待這種消息的答案?」。如果是使用call這是同步的,如果沒有使用cast這是異步的。

但是自從我使用Erlang以來已經有一段時間了。