Linux内核中select/poll/epoll的实现和区别

分类:知识百科 日期: 点击:0

Linux内核中的select/poll/epoll是三种不同的IO多路复用技术,它们用于检测文件描述符的可读性,它们的实现和区别如下:

select

select是最早出现的IO多路复用技术,用于检测文件描述符的可读性,它的实现原理是通过系统调用select将文件描述符放入一个集合中,等待操作系统将可读文件描述符从集合中删除,返回可读文件描述符的个数。select有以下特点:

  • select支持的文件描述符的最大数量受限,一般为1024,这对于服务器来说是不够用的;
  • select支持的文件描述符的类型有限,只支持套接字;
  • select的调用非常耗时,因为它需要将文件描述符的状态拷贝到内核空间,再拷贝回用户空间;
  • select不支持边沿触发,它只支持水平触发,这意味着只要文件描述符可读,select就会一直返回可读,直到文件缓冲区中的数据被读完;
  • select只能用于检测文件描述符的可读性,不能用于检测文件描述符的可写性。

poll

poll是select的替代方案,它的实现原理和select类似,也是将文件描述符放入一个集合中,等待操作系统将可读文件描述符从集合中删除,返回可读文件描述符的个数。poll有以下特点:

  • poll支持的文件描述符的最大数量没有限制;
  • poll支持的文件描述符的类型有限,只支持套接字;
  • poll的调用也是耗时的,但比select要快,因为它不需要将文件描述符的状态拷贝到内核空间;
  • poll也只支持水平触发,不支持边沿触发;
  • poll只能用于检测文件描述符的可读性,不能用于检测文件描述符的可写性。

epoll

epoll是Linux 2.6内核中引入的新的IO多路复用技术,它的实现原理是通过系统调用epoll_ctl将文件描述符放入一个内核空间的红黑树中,等待操作系统将可读文件描述符从红黑树中删除,返回可读文件描述符的个数。epoll有以下特点:

  • epoll支持的文件描述符的最大数量没有限制;
  • epoll支持的文件描述符的类型更加丰富,支持套接字、管道、FIFO、信号、定时器;
  • epoll的调用比poll更快,因为它不需要将文件描述符的状态拷贝到内核空间;
  • epoll支持边沿触发,可以更精确的检测文件描述符的可读性;
  • epoll既可以用于检测文件描述符的可读性,也可以用于检测文件描述符的可写性。

以上就是,它们都可以用于检测文件描述符的可读性,但是epoll的性能更好,支持的文件描述符的类型更加丰富,支持边

标签:

版权声明

1. 本站所有素材,仅限学习交流,仅展示部分内容,如需查看完整内容,请下载原文件。
2. 会员在本站下载的所有素材,只拥有使用权,著作权归原作者所有。
3. 所有素材,未经合法授权,请勿用于商业用途,会员不得以任何形式发布、传播、复制、转售该素材,否则一律封号处理。
4. 如果素材损害你的权益请联系客服QQ:77594475 处理。