Muduo网络库的实现多线程(十)

本文详细介绍了Muduo网络库的多线程实现,包括EventLoopThreadPool的事件循环池设计,Connector的连接管理,TimerQueue的定时器处理,以及TcpClient的重连策略。Muduo采用轮询方式选取EventLoop,确保连接负载均衡,并讨论了错误处理和重试机制。
摘要由CSDN通过智能技术生成

源码下载以及安装点击链接https://blog.csdn.net/YoungSusie/article/details/90021742

分类 Muduo网络库编程 学习笔记

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,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值