当前位置: 首页 > news >正文

epoll 水平ET跟边缘LT触发的区别是什么

epoll默认的是水平触发 意思就是当我们depoll默认的是水平触发 

  • LT 模式(水平触发)
    • 工作机制:在 LT 模式下,只要文件描述符(例如套接字)对应的 I/O 缓冲区中有数据可读或者可写空间(对于写操作),就会一直触发通知事件。以epoll为例,当一个套接字有数据可读时epoll_wait会返回这个套接字的可读事件,并且只要缓冲区中还有数据没读完,下次调用epoll_wait时仍然会返回这个套接字的可读事件。
    • 示例说明:假设使用epoll的 LT 模式来监听一个套接字的可读事件。当客户端发送了 100 字节的数据到服务器套接字,服务器在epoll_wait返回可读事件后,只读取了 50 字节,那么下次调用epoll_wait时,仍然会因为缓冲区中还有剩余的 50 字节数据而返回这个套接字的可读事件,直到缓冲区中的数据全部被读完。
  • ET 模式(边沿触发)
    • epoll的 ET 模式为例,当一个套接字的缓冲区从空变为有数据时,epoll_wait会返回可读事件,但如果这次没有把缓冲区中的数据全部读完,下次调用epoll_wait时,不会再因为缓冲区还有剩余数据而返回可读事件,除非又有新的数据到达使得缓冲区状态再次发生变化。
    • 示例说明:同样是服务器监听客户端套接字的可读事件,在 ET 模式下,如果客户端发送了 100 字节的数据,服务器在epoll_wait返回可读事件后,只读取了 50 字节,下次调用epoll_wait时,不会再返回这个套接字的可读事件,直到客户端再次发送新的数据,导致套接字的可读状态再次发生变化
  • 所以我们在ET模式下 
  •  if(curfd == lfd) {// 监听的文件描述符有数据达到,有客户端连接struct sockaddr_in cliaddr;int len = sizeof(cliaddr);int cfd = accept(lfd, (struct sockaddr *)&cliaddr, &len);// 设置cfd属性非阻塞int flag = fcntl(cfd, F_GETFL);flag |= O_NONBLOCK;fcntl(cfd, F_SETFL, flag);epev.events = EPOLLIN | EPOLLET;    // 设置边沿触发   epoll默认是水平触发epev.data.fd = cfd;epoll_ctl(epfd, EPOLL_CTL_ADD, cfd, &epev);} else {if(epevs[i].events & EPOLLOUT) {continue;}  // 循环读取出所有数据char buf[5];int len = 0;
    //这里的curfd就是我们cfd因为我们把cfd加入epoll监听当中去了while( (len = read(curfd, buf, sizeof(buf))) > 0) {// 打印数据// printf("recv data : %s\n", buf);write(STDOUT_FILENO, buf, len);write(curfd, buf, len);}

http://www.lryc.cn/news/514802.html

相关文章:

  • 设计模式 创建型 单例模式(Singleton Pattern)与 常见技术框架应用 解析
  • Java项目实战II基于微信小程序的家庭大厨(开发文档+数据库+源码)
  • 【JVM】总结篇-字节码篇
  • HTML——28.音频的引入
  • Visual Point Cloud Forecasting enables Scalable Autonomous Driving——点云论文阅读(12)
  • 《Xsens动捕与人形机器人训练》讲座将于1月9日下午2:30在线上召开
  • Mac 安装 Flutter 提示 A network error occurred while checking
  • 形态学:图像处理中的强大工具
  • 树莓派 Pico RP2040 教程点灯 双核编程案例
  • 2024年大型语言模型(LLMs)的发展回顾
  • 实现单例模式的五种方式
  • pcl源码分析之计算凸包
  • 在K8S中,Pod请求另一个Pod偶尔出现超市或延迟,如何排查?
  • 3blue1brow线代笔记
  • 【前端系列】优化axios响应拦截器
  • SQL使用视图
  • 在Windows计算机上打开 HEIC 文件的 6 种有效方法
  • 开源数据集成平台白皮书重磅发布《Apache SeaTunnel 2024用户案例合集》!
  • C# delegate 委托使用教程
  • 《机器学习》——数据标准化(0~1标准化,z标准化)
  • 如何监控和管理API接口的调用频率和并发量?
  • springboot+vue使用EasyCaptcha实现简单验证码
  • “善弈者”也需妙手,Oclean欧可林:差异化不是说说而已
  • Lianwei 安全周报|2025.1.2
  • 吐卡机开发——指令合集—未来之窗行业应用跨平台架构
  • C# 设计模式(创建型模式):单例模式
  • 使用WebSocket 获取实时数据
  • 阿里云服务器上安装配置Logtail日志收集客户端
  • Java实现下载excel模板,并实现自定义下拉框
  • postgres docker安装