Gen_server 和 gen_server2

Gen_server 和 gen_server2

1.erlang project大部分module都是gen_server,RabbitMQ重新实现了gen_server -> gen_server2, 很多Module都是用了这个behavior

 

2.gen_server 原理

 

启动流程:

gen_server.erl

 

Gen.erl

 

 

 

 

Gen_server.erl

 

 

 

 

CALL调用

Gen_server.erl

 

Gen.erl

 

 

gen_server 和 gen_server2 最大的不同是:

gen_server2 收到任何一条消息放到外部的队列中,当VM内部消息队列为空后,才进行消息处理,继续循环

gen_server 收到任何一条消息后,立即进行处理,处理完成后继续循环

Gen_server2.erl

 

 

 

Erlang 选择性接收 :这样使用会遍历一遍内部消息队列

 

 

 

prim_inet.erl

 

你可能感兴趣的:(Gen_server 和 gen_server2)