linux下的网络模型,首推EPOLL模型
最近在思考,epoll ET模式触发条件是什么?
1.ET模式下,对端发送1000字节数据,tcp内核缓冲区有1000字节数据,然后epoll通知我可读事件,我读取了200就不读了,内存缓冲区还剩余800字节,如果对端不继续发送数据,那么没法再次触发可读事件,这800字节就被丢掉了
如果对端又发送了1个字节,那么会再次触发可读事件,现在内核缓冲区里面有801个字节,epoll通知我可读事件,我可以一次把801个字节都读完
因此ET模式下,一般处理是:触发事件后,一直循环读取数据,直到读返回EAGAIN。而LT模式的epoll就没有这个烦恼。
2.LT模式,对端发送1000字节数据,tcp内核缓冲区有1000字节数据,然后epoll通知我可读事件,我读取了200就不读了,内存缓冲区还剩余800字节,LT模式下epoll会持续触发事件通知应用层,内核缓冲区中还有数据没取,直到内核缓冲区的数据都被取走。
EPOLL的源代码分析