【Redis】用ET还是LT?- 基于epoll的Reactor

【框架开发】用ET还是LT?- 基于epoll的Reactor

如果要写一个事件驱动的非阻塞的异步IO框架,该怎么考虑?

用epoll作为多路复用的框架

Reactor#

image

LT和ET#

image

LT vs ET 在读流程上#

读的话是有数据才要干活

image

可以看到我们需要不断循环ET直到将缓冲区里面的东西读完,防止epoll_wait卡住,直到返回了Eagin

==》可以自己记录一个状态,不通过epoll_wait唤醒回调

在LT模式下我们可以直接返回epoll_wait,epoll_wait会一直通知你

LT vs ET 在写流程上#

写的话是没数据可以干活,但此时不一定有事要干==》大部分写缓冲是空的

可写状态是常态

fd作为一个写事件注册进来,而fd大部分时间都是可写的。此时LT模式下epollwait没有意义,会一直告诉有out事件,在write时发现buf里面没有要写的事件,又回去wait,发现又是可写的,==》死循环了

为了避免反复触发的可写

==》通过epollctl把fd拿出来,只有在必然有写事件时才把fd放进来

==》先尝试写到fd中,写不进去再写到writebuf中,这时候才注册一个写事件。等到写完了再把fd拿出来

LT的写流程#

image

ET的写流程#

可见ET下写模式比较简单

image

作者:ydssx7

出处:https://www.cnblogs.com/ydssx7/p/17270951.html

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

posted @   ydssx  阅读(107)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
more_horiz
keyboard_arrow_up dark_mode palette
选择主题
menu
点击右上角即可分享
微信分享提示