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

本文深入分析了Erlang中RabbitMQ的worker_pool组件,包括其由worker_pool和worker_pool_worker构成的结构,同步提交任务submit的功能,以及异步提交任务submit_async的工作流程。worker_pool利用gen_server2行为、hibernate和backoff策略,确保在无任务请求时进入休眠状态,有效管理scheduler线程。同时,详细阐述了submit和submit_async两种提交任务方式的内部处理机制,如何处理任务队列和worker状态的管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值