经常使用的时间驱动模型(Windows和Linux都有)有三种:函数
一、select优化
- 对于读(Read)事件、写(Write)事件和异常(Exception)事件分别建立事件描述符集合,分别用来收集读事件的描述符、写事件的描述符和异常事件的描述符;
- 调用底层提供的select()函数,等待事件的发生;
- 轮询全部事件描述符集合中的每个事件描述符,检查是否有相应的事件发生,若是有就处理。
二、poll事件
该模型的实现方式与select相似,不一样之处在于只建立一个事件描述符集合,在描述符对应的结构上分别设置读事件、写事件和异常事件,最后轮询的时候,能够同时检查这三种事件是否发生。能够说,poll是对select的优化实现。it
三、epollio
epoll与前两种相比有不少不一样。select
- 该模型是经过相关调用通知内核建立一个有N个描述符的事件列表;而后,给这些描述符列表设置所关注的事件,并把它添加到内核的事件列表中去;
- 完成设置以后,epoll就开始等待内核通知事件发生了。某一事件发生后,内核将发生事件的描述符列表上报给epoll。获得事件列表的epoll就能够开始事件处理了。