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