`

epoll的ET和LT两种模式对比及注意事项

阅读更多

ET模式:

因为ET模式只有从unavailable到available才会触发,所以

1、读事件:需要使用while循环读取完,一般是读到EAGAIN,也可以读到返回值小于缓冲区大小;

如果应用层读缓冲区满:那就需要应用层自行标记,解决OS不再通知可读的问题

2、写事件:需要使用while循环写到EAGAIN,也可以写到返回值小于缓冲区大小

如果应用层写缓冲区空(无内容可写):那就需要应用层自行标记,解决OS不再通知可写的问题。

 

LT模式:

因为LT模式只要available就会触发,所以:

1、读事件:因为一般应用层的逻辑是“来了就能读”,所以一般没有问题,无需while循环读取到EAGAIN;

如果应用层读缓冲区满:就会经常触发,解决方式如下;

2、写事件:如果没有内容要写,就会经常触发,解决方式如下。

 

LT经常触发读写事件的解决办法:修改fd的注册事件,或者把fd移出epollfd。

 

总结:

目前好像还是LT方式应用较多,包括redis、libuv等。(nginx使用ET)

LT模式的优点在于:事件循环处理比较简单,无需关注应用层是否有缓冲或缓冲区是否满,只管上报事件。缺点是:可能经常上报,可能影响性能。

 

分享到:
评论
1 楼 chuqingq 2013-09-01  
补充一个讨论的链接:http://www.cppblog.com/peakflys/archive/2012/08/26/188344.html

相关推荐

    举源码实例来说明epoll之LT和ET模式的区别

    本篇将通过源码实例深入探讨epoll中的两种事件触发模式:Level Triggered(LT)和Edge Triggered(ET)模式的区别。 1. **Level Triggered(LT)模式** LT模式是epoll的默认模式。在这种模式下,当调用`epoll_wait...

    linux epoll ET和LT触发深入分析

    linux epoll ET和LT触发深入分析,深入剖析epoll触发机制。

    epoll demo(LT和ET)

    在提供的`epoll总结`文件中,应该包含了相关的代码示例,通过阅读和分析这些代码,你可以更深入地理解这两种模式的实现细节,包括如何注册文件描述符,如何设置`epoll`事件类型(`EPOLLIN`, `EPOLLOUT`, `EPOLLET`等...

    Linux 下 c++ 封装的 epoll ET模式 的 服务器

    在ET模式下,`epoll_wait`只在事件真正发生时返回,这减少了不必要的唤醒和回调,提高了效率。但是,ET模式也需要注意避免死锁,例如在读写操作时,必须确保数据的完全读取或写入,否则可能会陷入等待状态。 本...

    Epoll模型详解

    epoll提供了两种工作模式:边缘触发(Edge Triggered, ET)和水平触发(Level Triggered, LT)。ET模式下,只有当数据真正到达时才会触发事件,适合非阻塞I/O。LT模式则只要fd上有未处理的数据就会触发事件,适合...

    epoll机制epoll_create、epoll_ctl、epoll_wait、close(在epoll的ET模式下,read和write或send和recv当返回值0且errno=EAGAIN - linking530的专栏 - CSDN博客.mht

    epoll机制epoll_create、epoll_ctl、epoll_wait、close(在epoll的ET模式下,read和write或send和recv当返回值0且errno=EAGAIN - linking530的专栏 - CSDN博客.mht

    selet-poll-epoll三种模式的简介与比较

    selet-poll-epoll三种模式的简介与比较

    基于epoll的推送和问答模式服务器

    **基于epoll的推送和问答模式服务器** 在计算机网络编程中,epoll是Linux系统提供的一种I/O多路复用技术,它极大地提高了处理大量并发连接的效率。本项目实现了一个基于epoll的服务器,该服务器能够同时处理推送和...

    epoll 详细介绍

    `epoll`有两种工作模式:边缘触发(Edge Triggered, ET)和水平触发(Level Triggered, LT)。ET模式是`epoll`提高I/O效率的关键所在。在ET模式下,当一个事件发生时,例如数据到达,操作系统仅通知一次。一旦用户在...

    poll和epoll内核源码剖析

    在Linux系统中,I/O模型是处理并发网络编程的关键部分,而`poll`和`epoll`是两种广泛使用的I/O多路复用技术。它们允许一个进程监控多个文件描述符,等待数据就绪,而无需为每个描述符创建单独的线程。这极大地提高了...

    epoll学习笔记.doc

    本笔记将深入探讨`epoll`的工作原理、两种主要模式——Edge Triggered (ET) 和 Level Triggered (LT),以及如何在实际编码中使用`epoll`。 首先,`epoll`相比于传统的`select`和`poll`,提供了更高的性能和更灵活的...

    读书笔记:epoll_LT模式架构实现聊天室.zip

    读书笔记:epoll_LT模式架构实现聊天室

    linux下epoll网络模型介绍

    - **灵活的触发模式**:epoll 支持两种触发模式:边缘触发 (Edge Triggered, ET) 和电平触发 (Level Triggered, LT)。ET 模式下,只有当文件描述符状态改变时才会收到通知,而 LT 模式则会一直保持通知状态直到被...

    epoll 的事件模型 实例

    `epoll` 主要有两种工作模式:边缘触发(Edge Triggered, ET)和水平触发(Level Triggered, LT)。本文将通过一个实例来深入理解 `epoll` 的这两种模式。 首先,让我们理解一下边缘触发(ET)和水平触发(LT)的...

    socket epoll

    Epoll采用“边缘触发”(Edge Triggered, ET)和“水平触发”(Level Triggered, LT)两种模式,以及“多路复用I/O”(IO Multiplexing)策略,显著减少了系统调用的次数,从而提高了效率。 Epoll的核心操作有`...

    epoll使用方法

    epoll 有两种工作方式:LT (Level Triggered) 和 ET (Edge Triggered)。LT 模式是缺省的工作方式,同时支持 block 和 no-block socket。在 LT 模式下,内核告诉你一个文件描述符是否就绪了,然后你可以对这个就绪的 ...

    linux下的高并发处理select 和epoll

    3. **灵活性**:支持水平触发(LT)和边缘触发(ET)两种模式。水平触发模式下,只要事件发生就会一直通知,直到处理完;边缘触发模式下,只在事件发生时通知一次,避免了重复通知。 使用`epoll`,开发者可以更高效...

    EPOLL多线程TCP服务器

    EPOLL的核心思想是基于边缘触发(Edge Triggered, ET)和水平触发(Level Triggered, LT)两种模式,以及它所使用的红黑树数据结构,这使得EPOLL在处理大量文件描述符时表现更优。 1. **EPOLL的工作原理**: - **...

Global site tag (gtag.js) - Google Analytics