在linux的IO多路复用中有水平触发,边缘触发两种模式,这两种模式的区别如下:
水平触发:如果文件描述符已经就绪可以非阻塞的执行IO操作了,此时会触发通知.允许在任意时刻重复检测IO的状态,没有必要每次描述符就绪后尽可能多的执行IO.select,poll就属于水平触发.
边缘触发:如果文件描述符自上次状态改变后有新的IO活动到来,此时会触发通知.在收到一个IO事件通知后要尽可能多的执行IO操作,因为如果在一次通知中没有执行完IO那么就需要等到下一次新的IO活动到来才能获取到就绪的描述符.信号驱动式IO就属于边缘触发.
epoll既可以采用水平触发,也可以采用边缘触发.
大家可能还不能完全了解这两种模式的区别,我们可以举例说明:一个管道收到了1kb的数据,epoll会立即返回,此时读了512字节数据,然后再次调用epoll.这时如果是水平触发的,epoll会立即返回,因为有数据准备好了.如果是边缘触发的不会立即返回,因为此时虽然有数据可读但是已经触发了一次通知,在这次通知到现在还没有新的数据到来,直到有新的数据到来epoll才会返回,此时老的数据和新的数据都可以读取到(当然是需要这次你尽可能的多读取).
下面我们还从电子的角度来解释一下:
水平触发:也就是只有高电平(1)或低电平(0)时才触发通知,只要在这两种状态就能得到通知.上面提到的只要有数据可读(描述符就绪)那么水平触发的epoll就立即返回.
边缘触发:只有电平发生变化(高电平到低电平,或者低电平到高电平)的时候才触发通知.上面提到即使有数据可读,但是没有新的IO活动到来,epoll也不会立即返回.
相关推荐
- **边缘触发(Edge Triggered)**:只在事件首次变为就绪时触发事件处理。 #### 四、NIO的优势与局限性 **1. NIO带来的优势** - **事件驱动模型**:提高了系统的响应能力和处理能力。 - **非阻塞IO**:避免了长时间...
2. **EPOLL模型**: EPOLL支持边缘触发(ET)和水平触发(LT)两种模式。ET模式在事件发生时才通知,避免了重复唤醒;LT模式在事件未处理完之前持续通知,更易理解和使用。 3. **Java NIO与epoll结合**: Java 7引入了...
epoll是Linux特有的,提供更好的性能和更低的延迟,支持水平触发和边缘触发两种模式。 5. **ZooKeeper**: ZooKeeper是一个高可用、高性能的分布式协调服务,用于分布式环境中的配置管理、命名服务、分布式锁、...
- poll:无文件描述符数量限制,但存在复制文件描述符集的性能问题,以及水平触发的特性可能导致重复通知。 - epoll:Linux特有,提供了高效的数据结构和边缘触发,更适合高性能的服务器应用。 此外,面试中可能会...
epoll是Linux特有的,提供更高效、可扩展的解决方案,支持边缘触发和水平触发。 接下来,Zookeeper是一个重要的分布式协调服务,常用于大型分布式系统中,提供一致性、可用性和容错性。它的主要功能包括: 1. ...
epoll采用了“边缘触发”(ET)或“水平触发”(LT)两种模式,其中边缘触发只在事件状态变化时通知,而水平触发则在事件发生后持续通知,直至事件处理完毕。此外,epoll还支持“事件多路复用”(EPOLLONESHOT),只通知...
`epoll`是Linux特有的,它可以更高效地处理大量连接,提供边缘触发和水平触发两种模式,减少了不必要的通知。 此外,面试中还可能会讨论到分布式协调服务,如ZooKeeper。ZooKeeper是一种分布式协调服务,它使用...
`epoll`支持边缘触发(ET)和水平触发(LT)两种模式,且能有效地处理大量文件描述符。在`epoll.c`和`epollclient.c`中,可以学习到如何创建`epoll`实例,添加和移除文件描述符,以及使用`epoll_wait`来等待事件的...
1. **Netty Native Transport**:针对Linux系统,Netty使用了epoll的边缘触发(ET)模式,相比默认的水平触发(LT),在性能上有显著提升。 2. **Netty Thread Model**:Netty采用了线程模型,将事件分发、事件处理...
epoll具有较低的上下文切换开销和更好的性能,支持水平触发和边缘触发模式。 3. **系统调用与库函数**: - 系统调用是操作系统提供的接口,直接执行内核代码;库函数是预编译的代码,可能包含系统调用,但不一定。...
epoll的优势在于,它使用了边缘触发(ET)和水平触发(LT)两种模式,以及高效的红黑树数据结构来存储文件描述符,使得在高并发环境下,epoll_wait()的调用更加高效。相比select每次都需要遍历所有连接,epoll仅需...