muduo buffer类的设计与使用

Posted 合唱团abc

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了muduo buffer类的设计与使用相关的知识,希望对你有一定的参考价值。

Unix/Linux上的五种IO模型(UNP6.2)

IO多路复用一般不能和blocking IO用在一起,因为blocking IO中read() write() accept() connect()都有可能阻塞当前线程,这样线程就没办法处理其他socket上的IO事件了

non-blocking IO的核心思想是避免阻塞在read()或write()或其他IO系统调用上,让一个线程能服务于多个socket连接,IO线程只能阻塞在IO多路复用函数上,如select、poll、epoll_wait,这样一来,应用层的缓冲是必须的.

1.TcpConnection必须要有output buffer:write系统调用可能一次不能发送完程序需要发送的数据,此时剩余的数据保存在output buffer中。要让程序在write操作上不阻塞,网络库必须要给每个TCP connection配置output buffer.

2.TcpConnection必须要有input buffer:收到的数据可能不构成一条完整的消息或者一次收到两条消息的数据,收到的数据先放到input buffer里,等构成一条完整的消息再通知程序的业务逻辑(TCP分包)

综上,muduo中的IO都是带缓冲的IO,不会自己去read()或write()某个socket,只会操作TcpConnection的input buffer和output buffer.

 

以上是关于muduo buffer类的设计与使用的主要内容,如果未能解决你的问题,请参考以下文章

Nginx:Buffer缓冲区设计

muduo源码-HttpResponse.h

缩略muduo库:Buffer 缓冲区

缩略muduo库:Buffer 缓冲区

muduo源码-EpollPoller.h

muduo学习