Erlang:RabbitMQ源码分析 5. worker pool 实现分析

worker_pool 由一个worker_pool 和N个worker_pool_worker组成, N = number of scheduler threads

外部程序有两种方式来call worker_pool ,  submit(func) and submit_async(func)

submit(func) 是同步的提交Task,worker_pool 用worker_pool_worker做完返回

submit_async(func)是异步的提交Task,worker_pool 找个worker_pool_worker异步去做,如果没有worker_pool_worker就把Task加到Queue里


worker_pool是一个gen_server2的behavior,而且使用了hibernate和backoff,保证在没有Task request时候进入hibernate状态。


submit

submit是同步提交Task的方法,

              1. 如果State里有available的worker_pool_worker,

                        1.1 monitor call submit的pid, 如果这个pid 意外退出,worker_pool_worker会收到request,在worker_pool_worker的handle_info里处理,避免有pid 意外退出,却没有释放worker_pool_worker

                         1.2 就把call submit的pid 放到worker_pool_worker的State里

                         1.3 停止monito

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值