ceph线程池
线程模型主要有manager/worker, pipeline, peer三种,参见https://computing.llnl.gov/tutorials/pthreads/.ceph的线程池是典型的manager/worker:即有一个manager(主进程或者主线程)负责线程池创建,开启,暂停,恢复,终止等管理操作,相反,线程池中的所有线程都属于worker线程,负责执行真正的任务.
// ceph线程池类
class ThreadPool:
主要数据成员:
CephContext *cct
string name: 线程池的名称
string thread_name: 线程池中的线程的名称
string lockname: 锁的名称
Mutex _lock: 锁
Cond _cond:
Cond _wait_cond:
bool _stop: 表示线程池是否处于终止状态
int _pause: 表示线程池中的线程是否是处于暂停状态
int _draining: 表示任务队列中的任务是否被全部执行完毕
int ioprio_class, ioprio_priority
unsigned _num_threads 线程池中的线程数量
string _thread_num_option
const char **_conf_keys
vector<WorkQueue_ *> work_queues 线程池处理的工作队列集,用vector来表示
vector中的每个元素都是一个队列
int last_work_queue 上一次处理的队列号
set<WorkThread *> _threads; 线程池中的线程集
list<WorkThread *> _old_threads; 线程池中多余的线程,需要调用join_old_threads()来释放
int processin