对thrift中的TThreadPoolServer进行流量限制

本文介绍了如何在thrift C++服务端的TThreadPoolServer中实现流量限制。针对原有实现无法良好限制流量的问题,通过逻辑分析和具体实现,提出了通过封装标准实现来修改队列处理逻辑,当缓存队列达到最大长度时主动丢弃新请求,以达到流量控制的目的。
摘要由CSDN通过智能技术生成

thrift 对应 C++ 服务端实现中,基于线程池实现的TThreadPoolServer是最常用的实现之一。在使用过程中,有些场景需要对流量进行限制。在分析具体实现后,发现原有实现没法很好的完成这个需求,因此通过包装ThreadManager实现了这个功能。

逻辑分析

TThreadPoolServer使用ThreadManager作为线程池。自带的ThreadManager支持传入线程池线程数和最大任务数作为参数。

  /**
   * Creates a simple thread manager the uses count number of worker threads and has
   * a pendingTaskCountMax maximum pending tasks. The default, 0, specified no limit
   * on pending tasks
   */
  static stdcxx::shared_ptr<ThreadManager> newSimpleThreadManager(size_t count = 4,
                                                                 size_t pendingTaskCountMax = 0);

TThreadPoolServer接受一个新连接后,通过ThreadManager::add接口,把新建连接任务传入线程池处理,具体处理逻辑如下:

v
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值