1. 说明
- 一个EventLoopThreadPool类,使用了EvevtLoop,EventLoopThread类
- 线程池类,muduo的线程池是固定几个线程
- noncopyable
2. 变量
-
类型定义
- ThreadInitCallback
-
EventLoop* baseLoop_;
- 与Acceptor所属EventLoop相同
-
string name_;
- 名字
-
bool started_;
- 是否开始,在start()函数中赋值为true
-
int numThreads_;
- 线程数量
-
int next_;
- 新连接到来时,所选择的EventLoop对象下标
-
std::vector<std::unique_ptr> threads_;
- IO线程列表
-
std::vector<EventLoop*> loops_;
- EventLoop列表
3. 函数
-
构造
- 变量初始化,没做其他的
-
析构
- 什么都没做,不用释放loop,这是一个栈变量,会自动释放
-
void setThreadNum(int numThreads)
- 如名,设置线程数量
-
void start(const ThreadInitCallback& cb = ThreadInitCallback());
- 启动线程池,创建若干线程并加入到threads_当中,若numThreads_==0说明只有一个EventLoop,在这个EventLoop进入事件循环之前,调用cb(baseLoop)
-
EventLoop* getNextLoop();
- 获得下一个loop事件,循环获得,代码很容易理解
-
EventLoop* getLoopForHash(size_t hashCode);
- 根据哈希值获得EventLoop对象,实际就是hasCode对loop的数量取余,获得选用的loop.
-
std::vector<EventLoop*> getAllLoops();
- 返回loops_
-
bool started() const
- 返回started_
-
const string& name() const
- 返回name_