改变事件flag(比如从READ到WRITE)需要一个epoll_ctl系统调用,如果使用poll,只需在用户空间的一个简单的bitmask操作。epoll将5000个socket从读切换到写则需要5000个系统调用和上下文切换(直到2014年,epoll_ctl还没办法做到批处理,每个描述符需要单个切换)。但是poll只需要在一个pollfd结构中进行循环
当一个accepted socket需要被加到set中,epoll同样需要一个epoll_ctl,这就意味着每个新的连接socket都需要两次系统调用(poll是一次)。如果我们的服务有很多短期的连接,并且只有很少的数据传输,epoll很可能可能需要更多时间进行响应
epoll是Linux专有,其他平台有相似机制,但是也不尽相同。比如边沿触发机制
高性能的处理逻辑更为复杂,而且更难调试,尤其是边沿触发更容易出现死锁