【Redis】用ET还是LT?- 基于epoll的Reactor
【框架开发】用ET还是LT?- 基于epoll的Reactor
如果要写一个事件驱动的非阻塞的异步IO框架,该怎么考虑?
用epoll作为多路复用的框架
Reactor#
LT和ET#
LT vs ET 在读流程上#
读的话是有数据才要干活
可以看到我们需要不断循环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的写流程#
ET的写流程#
可见ET下写模式比较简单
作者:ydssx7
出处:https://www.cnblogs.com/ydssx7/p/17270951.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?