Erlang为什么进程在使用proc_lib后才能退出:hibernate

时间:2014-07-23 02:59:27

标签: erlang

我刚开始研究Erlang并尝试编写一个彗星应用程序。

这就是事情。

为了降低内存使用率,我在Feed函数上使用proc_lib:hibernate。但是当套接字断开时,相应的进程仍然存在,而不是退出。

代码如下:

feed({Response, Interval, Socket}) ->            
    ok = mochiweb_socket:setopts(Socket, [{active, once}]),                
receive                                                              
        {Protocal, _, Bin} ->                                                     
            ok;                                                                
  {tcp_closed, _} ->                                                   
          exit(normal);                                                        
    {ssl_closed, _} ->                                                     
          exit(normal);                                                        
  {router_msg, MsgBody} ->                                                    
      RespMsg=Response:write_chunk(MsgBody);                                                                                 
    Other ->                                                                         
      exit(normal)                                                     
after Interval ->                                                              
        Response:write_chunk("HB")                                   
  end,                                                                        
proc_lib:hibernate(?MODULE, feed, [{Response, Interval, Socket}]). 

1 个答案:

答案 0 :(得分:1)

在休眠之前,您需要再次将套接字选项设置为{active, once} 。否则,套接字将永远不会向进程发送消息,因此进程不会从休眠状态唤醒。