Erlang:RabbitMQ源码分析 2. gen_server和gen_server2 深入剖析

RabbitMQ重新实现了erlang的gen_server -> gen_server2。 本文从源码角度对比二者的实现。
摘要由CSDN通过智能技术生成

据某erlang大牛说,erlang project里90%的module都是gen_server

RabbitMQ重新实现了gen_server -> gen_server2。 很多Module都是用了这个behavior。

我们首先来看下OTP里gen_server 的实现:

gen_server的启动入口是gen_server:start_link,一个以gen_server为behavior的Module,例如frontend call gen_server:start_link( node_manager)来启动node_manager这个gen_server.

gen_server:start_link启动一个进程,执行gen_server:init_it。

gen_server:init_it做了三件事:

1.  调用node_manager:init

2.  send ack to frontend 

3.  start loop


loop

先比较gen_server和gen_server2的loop

gen_server loop是receive一个message,处理这个message,再去receive下一个message,没有message时就block在那里。

message一般是三种来源:

1. frontend 的gen_server:call 由 node_manager: handle_call来处理, 会有r

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值