muduo网络库设计的总结摘要与分析

首先是设计的分析,有了设计才能根据设计编码:

1、单线程编程模型采用"non-blocking IO + IO multiplexing",即Reactor模型。基本结构是一个事件循环,以事件驱动和事件回调的方式实现业务逻辑。优点:可以用于读写socket,连接的建立,甚至DNS解析都可以用非阻塞方式进行,以提高并发度和吞吐量,利于IO密集的应用。缺点:事件回调函数是非阻塞的,对于涉及网络IO请求响应式协议容易分割业务逻辑。

2、多线程编程模型采用"one loop per thread + thread pool"。event loop,用于IO multiplexing ,配合non-blocking IO和定时器。thread pool用做计算。基本结构:TcpSever所在的EventLoop用来接收新的Tcp连接,同时在thread pool里挑选一个loop给新的Tcp连接使用。可参考多线程Reactor模型。

3、进程间的通信只用TCP。优点:可以跨主机,具有伸缩性;是双向通信的。一个分布式系统由运行在多台机器上的多个进程组成的,进程之间采用TCP长连接通信,提倡在功能划分后,实现同一类服务进程时可以借助多线程来提高性能。TCP长连接好处:容易定位分布式系统中的服务之间的依赖关系;通过接受和发送队列的长度也必将容易定位网络或程序故障。

4、单线程服务器场景:看门狗进程。优点:只有单线程程序能fork,多线程会产生很多麻烦。单线程程序能限制CPU的占用率。

5、多线程程序要求:1)多个CPU可使用。2)线程之间可共享数据并修改 。3)事件的响应有优先级。 4)划分责任与功能,每个线程逻辑单一。 5)性能可预测。 6)使用异步进行。

Buffer类

non-blocking的核心思想是避免阻塞在read()和write()或其他IO系统调用上,这样可以最大限度复用thread-of-control,让一个线程能服务于多个socket连接。IO 线程只能阻塞在 IO-multiplexing 函数上,如 select()/poll()

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值