源码下载以及安装点击链接https://blog.youkuaiyun.com/YoungSusie/article/details/90021742
1、EventLoopThreadPool
用 one loop per thread 的思想实现多线程TcpServer 的关键步骤是在新建TcpConnection 的时候从 event loop pool (事件循环池)中挑选一个 loop 给 TcpConnection 用。也就是说多线程 TcpServer 自己的EventLoop 只用来接收新连接,而新连接会用其他的 EventLoop 来执行IO。(单线程TcpServer 的 EventLoop 是与TcpConnection 共享的。)新建 EventLoopThreadPool class 来表示event loop pool。
TcpServer 每次新建一个 TcpConnection 就会调用 getNextLoop() 来 从事件循环池取得EventLoop 负责 这个新的TcpConnection 。也就是分了主EventLoop 和 从 EventLoop , 主EventLoop 只负责监听是否有新连接的到来以及accept 新连接。新连接后续的IO处理 都交给 从EventLoop。
TcpServer 需要增加数据成员threadPool_ 和成员函数 setThreadNum()。单线程是TcpServer 将原来的loop_ 传给 TcpConnection ,多线程是TcpServer 每次从EventLoopThreadPool 中取出一个空闲的loop 作为新连接的ioLoop,新ioloop 必须先调用start() 才可以用新的线程。
void TcpServer::newConnection(int sockfd, const InetAddress & peerAddr)
{
loop_->assertInLoopThread();
char buf[32];
snprintf(buf,