ET为什么要是非阻塞的

参考:https://blog.csdn.net/admin_maxin/article/details/53439815

什么时候会阻塞:读一个空的缓冲区的时候,就会产生阻塞。

为什么LT可以使用阻塞和非阻塞,ET只能使用非阻塞?
是这样的,LT是对于每个epoll_wait返回的读事件,每次都是读取一定数量的字节,然后返回,若没读完,等待下一次epoll_wait再读,因此LT的每次读的时候缓冲区都是非空的;而ET对于epoll_wait返回的读事件,需要使用while循环把所有字节都读取完毕,也就是读到缓冲区为空为止,这样最后一次读取一定会导致阻塞,因此需要把ET的读取设置成非阻塞的。

发布了138 篇原创文章 · 获赞 26 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/a13602955218/article/details/105325404