select poll epoll 区别
时间: 2023-04-28 07:06:19 浏览: 144
select 和 epoll 是 Linux 中的两种 I/O 多路复用方式。
select 是一种基于阻塞的 I/O 多路复用方式,它会在等待时阻塞进程,当有 I/O 事件发生时才会返回。
epoll 是一种基于非阻塞的 I/O 多路复用方式,它通过轮询的方式来检测 I/O 事件,不会阻塞进程。
总结来说,select 是基于阻塞的,而 epoll 是基于非阻塞的。epoll 比 select 更高效,尤其在处理大量连接的情况下。
相关问题
select poll epoll区别
select、poll和epoll都是用于实现IO多路复用的机制,可以在一个线程内同时监听多个文件描述符的IO状态。它们的主要区别在于实现机制和可扩展性,具体如下:
1. select和poll的实现机制是基于轮询的,即每次都需要遍历全部的文件描述符。而epoll采用了事件触发的方式,只有当IO事件就绪时才会通知用户进程,因此可以避免轮询的开销。
2. select和poll的文件描述符集合是基于数组实现的,因此在文件描述符数量较大时,每次调用都需要复制一次集合,造成了一定的时间开销。而epoll采用了事件驱动的方式,文件描述符集合只需要在初始化时进行一次复制,之后每次调用时只需要传递一个指向内核空间的指针即可。
3. select和poll的可扩展性较差,主要原因在于它们采用了数组来存储文件描述符集合,因此每次调用都需要进行一次复制。而epoll支持水平触发和边缘触发两种模式,并且可以通过设置EPOLLONESHOT选项来实现更高效的事件通知。
总的来说,epoll的性能优于select和poll,特别是在高并发的情况下,因此在实际开发中应优先考虑使用epoll。
select poll epoll
select、poll和epoll都是用于多路复用的I/O模型。它们的作用是同时监视多个文件描述符(包括socket文件描述符)的可读、可写和错误事件,并在事件就绪时通知应用程序进行相应的处理。
select和poll是传统的I/O模型,它们的调用接口相对简单,只提供一个函数。但是由于每次调用都需要将所有的文件描述符集合传递给内核,效率会随着文件描述符数量的增加而下降。此外,select和poll对文件描述符的管理机制也没有做太多的优化,因此在大量文件描述符的情况下,效率会更低。
与select和poll不同,epoll提供了三个函数:epoll_create、epoll_ctl和epoll_wait。通过epoll_create创建一个epoll句柄,然后通过epoll_ctl注册要监听的事件类型,最后通过epoll_wait等待事件的产生。
epoll的实现机制与select和poll完全不同,它利用了内核与用户空间共享同一个事件表的机制,这样每次调用epoll_wait时只需要将就绪事件通知给应用程序,避免了每次调用都需要遍历所有文件描述符的问题,大大提高了效率。
总的来说,select、poll和epoll都是用于实现I/O多路复用的机制,但是epoll相比于select和poll在性能上有较大的优势,尤其是在连接数多、连接活跃的情况下。
阅读全文