epoll对于上100百万级的大的并发在性能要远远大于select和poll,因为select采用数组来存放句柄,每次均把数组句柄全部复制至内核态;这样加重了cpu的执行负担,严重影响了执行速度,而且每次读或写事件触发时,均对数组进行一次遍历;
而epoll模式则分了三个阶段:
epoll_create,初始创建一个红黑树;
然后创建一个wait list;
epoll_ctl时将当前socket连接挂到create阶段创建的红黑树上;
内核在有消息通知时,会将消息写到wait list列表中;
epoll_wait时会定时检查wait list中的事件,并调用对应的回调函数进行处理