epoll

epoll 编程

LT(level triggered)是缺省的工做方式,而且同时支持block和no-block socket.在这种作法中, 内核告诉你一个 文件描述符是否就绪了,而后你能够对这个就绪的fd进行IO操做。若是你不做任何操做, 内核仍是会继续通知你的,因此,这种模式编程出错误可能性要小一点。传统的select/poll都是这种模型的表明。
ET (edge-triggered)是高速工做方式,只支持no-block socket。在这种模式下,当描述符从未就绪变为就绪时, 内核经过epoll告诉你。而后它会假设你知道 文件描述符已经就绪,而且不会再为那个文件描述符发送更多的就绪通知,直到你作了某些操做致使那个文件描述符再也不为就绪状态了(好比,你在发送,接收或者接收请求,或者发送接收的数据少于必定量时致使了一个EWOULDBLOCK 错误)。可是请注意,若是一直不对这个fd做IO操做(从而致使它再次变成未就绪), 内核不会发送更多的通知(only once),不过在TCP协议中,ET模式的加速效用仍须要更多的benchmark确认。
ET和LT的区别就在这里体现,LT事件不会丢弃,而是只要读buffer里面有数据能够让用户读,则不断的通知你。而ET则只在事件发生之时通知。能够简单理解为LT是水平触发,而ET则为边缘触发。LT模式只要有事件未处理就会触发,而ET则只在高低电平变换时(即状态从1到0或者0到1)触发。[1]
相关文章
相关标签/搜索