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