select、epoll和poll的区别?
时间: 2023-12-03 16:03:50 浏览: 170
linux中 epoll poll 和select的区别
select、poll、epoll 都是 I/O 多路复用的机制,可以通过在一个线程中监视多个文件描述符(包括 socket)的可读可写等事件,从而减少阻塞,提升 I/O 性能。
其中 select 是最古老的机制,它将待监视的文件描述符集合复制到内核中,内核遍历每个文件描述符,检查其是否有事件发生,判断完成后将事件发生的文件描述符集合返回给用户空间。select 的缺点是每次操作都需要重新构造待监视集合,效率较低。同时,select 对于每个监视对象数量有限制。
poll 与 select 的作用相同,但是其采用的是链表结构,因此相对于 select 而言更加节省空间,同时监视对象数量的上限也更高。poll 的缺点是,与 select 一样,每次操作都需要把监视对象集合从用户空间复制到内核中。
epoll 是 Linux 特有的机制,其使用了一个 epoll 文件描述符来管理所有待监视的文件描述符,可以只在 epoll 实例上注册一次,从而避免了那些需要重复复制大量文件描述符的缺点。另外,epoll 对于大量连接时的性能表现也更优秀。
总的来说,select 和 poll 适用于比较简单的场景,而对于高性能、大规模连接和大量数据的场景,epoll 更为适用。
阅读全文