1. 类说明
1. 功能
- muduo的线程池类
2. 继承
- noncopyable
2. 成员变量说明
- mutex_
- 锁
- notEmpty_/notFull_
- 条件变量
- name_
- 线程池名字
- threadInitCallback_
- Task类型,是void()的std::function,在类内定义的
- threads_
- 线程指针的数组(vector),指向线程池中的线程
- queue_
- deque类型的Task队列
- maxQueueSize_
- 最大值
- running_
- bool类型,看是否有线程在运行
3. 成员函数说明
1. 普通
- 构造函数
- 初始化变量,要传入name,不传的话有默认的名字
- 析构函数
- 如果running_为true,调用stop()
- setMaxQueueSize(int)
- 如名
- setThreadInitCallback(const Task&)
- 设置回调函数
- start(int)
- 设置线程的数量,并设置线程的状态为running,并且通过 threads_.reserve(numThreads)设置线程池中线程的数量,同时设置线程的回调函数
- 使用了emplace_back,和push_back功能类似,但是可以避免额外的复制和移动操作.emplace_back的参数是右值
- 所有线程启动,以runInThread()作为线程函数
- stop()
- 将线程池的状态修改为停止,同时等待所有的线程结束
- name()
- 返回name_
- queueSize()
- 返回任务队列的大小,即看有多少个任务
- run(Task)
- 如果线程队列为空,就直接运行,否则的话把任务加到任务队列
2. 私有
- isFull()
- 看任务队列是否已经到达最大值
- runInThread()
- 若threadInitCallback_存在,先调用这个函数
- 线程循环从task中取出任务执行
- take()
- 如果任务队列不为空,从队首取出任务,否则一直等待