现在的位置: 首页 > 综合 > 正文

epoll两种触发方式

2018年03月30日 ⁄ 综合 ⁄ 共 514字 ⁄ 字号 评论关闭

        LT(level triggered)是缺省的工作方式,并且同时支持block和no-block socket.在这种做法中,内核告诉你一个文件描述符是否就绪了,然后你可以对这个就绪的fd进行IO操作。如果你不作任何操作,内核还是会继续通知你的,直至变为未就绪状态,所以,这种模式编程出错误可能性要小一点。传统的select/poll都是这种模型的代表。

  ET (edge-triggered)是高速工作方式,只支持no-block socket。在这种模式下,当描述符从未就绪变为就绪时,内核通过epoll告诉你。然后它会假设你知道文件描述符已经就绪,并且不会再为那个文件描述符发送更多的就绪通知,直到你做了某些操作导致那个文件描述符不再为就绪状态了(比如,你在发送,接收或者接收请求,或者发送接收的数据少于一定量时导致了一个EWOULDBLOCK 错误)。但是请注意,如果一直不对这个fd作IO操作(从而导致它再次变成未就绪),内核不会发送更多的通知(only
once),故上层须对fd进行IO操作,直至fd变为未就绪状态,否则epoll被不再被触发。在TCP协议中,ET模式的加速效用仍需要更多的benchmark确认。

抱歉!评论已关闭.