理论剖析:什么是 LT 水平触发模式?

理论剖析:什么是 LT 水平触发模式? 一、 理论剖析:什么是 LT 水平触发模式?在正式撸代码之前,我们先明确笔记中关于 LT 模式的核心定义:缺省即默认:当你调用epoll_create和epoll_ctl添加节点时,如果不加特殊标志,默认就是 LT 模式。兼容性强:它同时支持阻塞(Block)和非阻塞(No-Block)套接字。核心工作机制(极其重要):读事件(EPOLLIN):只要内核读缓冲区里还有数据没被取走,epoll_wait()就会持续不断地解除阻塞,通知应用程序去读。写事件(EPOLLOUT):只要内核写缓冲区还有可用空间,epoll_wait()就会持续通知。(注:实际开发中通常不监听写事件,防止 CPU 空转)。处理灵活性:正因为内核会反复通知,LT 模式允许我们将一个大的数据包分多次读取,容错率极高。二、 极限测试实验:5 字节缓冲区的挑战为了直观验证 LT 模式的“持续通知”特性,我们设计了以下实验:客户端:一次性发送一段较长的数据(例如:hello,world.你好,世界)。服务器:每次epoll_wait唤醒后,故意只用一个5 字节的缓冲区去recv接收数据。按照理论,如果客户端发了 20 多字节,服务器每次只读 5 字节,那么epoll_wait应该会被连续唤醒 5 到 6 次,直到数据彻底被读干净。1. 服务器端代码 (epoll_server_lt.c)#includestdio.h#includestdlib.h#includeunistd.h#includestring.h#includearpa/inet.h#includesys/epoll.h#definePORT8989// 笔记要求的端口intmain(){// 1. 创建套接字并绑定监听intlfd=socket(AF_INET,SOCK_STREAM,0);intopt=1;setsockopt(lfd,SOL_SOCKET,SO_REUSEADDR,opt,sizeof(opt));structsockaddr_inaddr;memset(addr,0,sizeof(addr));addr.sin_family=AF_INET;addr.sin_port=htons(PORT);addr.sin_addr.s_addr=INADDR_ANY;