muduo网络库源码解析 一

在谈muduo之前,我们来探讨一下常用的网络编程模型,从线程的角度来看,分别有单线程服务器编程模型和多线程服务器编程模型。

1、单线程服务器编程模型常用的是Reactor,即non-blocking IO + IO multiplexing,比较著名的有lighttpd,libevent等,采用这种模型的程序基本结构为一个事件循环,以事件驱动和事件回调方式实现业务逻辑.

2、多线程服务器的常用编程模型

(1)每个请求创建一个线程,使用阻塞式IO操作

(2)使用线程池,同样使用阻塞式IO,这是对第一种的改进,提高性能

(3)使用non-blocking IO + IO multiplexing

第三种模型。在这种模型下,程序的每个IO线程有一个event loop,用于处理读写和定时事件,这样的好处是

(1)线程数目基本固定,可以采用线程池的方式

(2)方便在线程间调配负载

(3)IO事件发生的线程是固定的,同一个TCP连接不必考虑事件并发

总的来说,muduo推荐使用one event loop per thread + thread pool,其中event loop用作IO multiplexing,用来配合非阻塞IO,thread pool用来计算。

陈硕认为,TCP网络编程最本质的是处理三个半事件:

(1)连接的建立

(2)连接断开 包括主动断开和被动断开

(3)消息到达,文件描述符可读。这是最为重要的一个事件,对其处理方式决定了网络编程的风格(阻塞还是非阻塞,如何处理分包,应用层缓冲如何设计)

(3.5)消息发送完毕 对于低流量的服务,可以不用关心这个事件。另外这里的发送完毕指的是将数据写入操作系统的缓冲区,并不代表对方已经收到

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值