epoll、poll、select的区别是:1、内核支持;2、系统调用数量;3、文件描述符数量;4、数据结构;5、触发模式。select是最古老的多路复用机制,它早于Linux的内核版本2.0,已经成为了Unix网络编程中经典的多路复用机制。
一、epoll、poll、select的区别
1、内核支持
select是最古老的多路复用机制,它早于Linux的内核版本2.0,已经成为了Unix网络编程中经典的多路复用机制。poll是在Linux内核2.1.15中引入的一种多路复用机制,它比select更加高效。而epoll是在Linux内核2.5.44中引入的一种更加高效的多路复用机制,它是目前最常用的多路复用机制之一。
2、系统调用数量
select和poll在使用时,每次都需要将所有待监视的文件描述符从用户空间复制到内核空间,而epoll使用了事件驱动的方式,将只有活跃的文件描述符加入到内核事件表中。因此,在处理大量文件描述符时,epoll比select和poll更快,能够提供更高的并发性和更好的性能。
3、文件描述符数量
select和poll在处理大量的文件描述符时,随着文件描述符数量的增加,性能会呈现出线性下降的趋势。而epoll能够高效地处理大量的文件描述符,并且在文件描述符数量很大时,性能损失很小。
4、数据结构
select和poll将所有待监视的文件描述符保存在一个数据结构中,而epoll将文件描述符分散到不同的事件集合中。因此,在处理大量文件描述符时,epoll的效率比select和poll更高。
5、触发模式
select和poll是水平触发(level-triggered)模式,即当文件描述符可读可写时,每次调用select或poll都会通知应用程序。而epoll支持水平触发和边缘触发(edge-triggered)两种模式,边缘触发只会通知应用程序一次,直到下一次事件发生时才会再次通知。边缘触发模式在处理大量的文件描述符时,能够提高效率。