Skip to content

Latest commit

 

History

History
13 lines (13 loc) · 1.53 KB

selectpollepoll分别讲讲.md

File metadata and controls

13 lines (13 loc) · 1.53 KB
  1. select
    • select是最早的多路复用IO模型之一,通过select系统调用可以同时监视多个文件描述符的IO事件。
    • 在使用select时,需要将需要监视的文件描述符加入到一个文件描述符集合中,并指定监视的IO事件类型(读、写、异常等)。
    • select会阻塞当前进程,直到有文件描述符就绪或超时等事件发生,然后返回就绪文件描述符的数量,应用程序需要遍历就绪文件描述符进行处理。
  2. poll
    • poll是对select的改进,在Linux系统中更常见,也可以同时监视多个文件描述符的IO事件。
    • 使用poll时,将需要监视的文件描述符加入到pollfd结构体数组中,并指定监视的IO事件类型。
    • poll调用会阻塞当前进程,直到有文件描述符就绪或超时等事件发生,然后返回就绪文件描述符的数量,应用程序需要遍历就绪文件描述符进行处理。
  3. epoll
    • epoll是Linux特有的高性能IO多路复用机制,相比select和poll具有更好的性能。
    • epoll使用基于事件驱动的方式,通过epoll_create创建一个epoll句柄,将需要监听的文件描述符加入到epoll句柄中。
    • 当有IO事件发生时,epoll_wait系统调用不会阻塞整个进程,而是立即返回就绪的文件描述符列表,应用程序只需处理这些就绪文件描述符。
    • epoll还支持边缘触发(EPOLLET)和水平触发(EPOLLONESHOT)两种工作模式,可以进一步提高IO效率。