在Linux下IO复用模型用的函数有select/poll和epoll?select和epoll函数有什么区别?

提问者:帅平 问题分类:面试刷题
在Linux下IO复用模型用的函数有select/poll和epoll?select和epoll函数有什么区别?

 您阅读本篇文章共花了: 

2 个回答
つ浅笑嫣然
つ浅笑嫣然
epoll 是在Linux2.6内核正式提出,完善了select 的一些缺点。
它定义了epoll_event结构体来处理,不存在最大连接数的限制。
并且它不像select函数每次把所有的文件描述符(fd)都遍历,简单理解就是epoll把就绪的文件描述符(fd)专门维护了一块空间,每次从就绪列表里边拿就好了,不再进行对所有文件描述符(fd)进行遍历。
发布于:1年前 (2023-03-16) IP属地:四川省
人潮似水看见我°
人潮似水看见我°
select函数它支持最大的连接数是1024或2048,因为在select函数下要传入fd_set参数,这个fd_set的大小要么1024或2048(其实就看操作系统的位数)
fd_set就是bitmap的数据结构,可以简单理解为只要位为0,那说明还没数据到缓冲区,只要位为1,那说明数据已经到缓冲区。
而select函数做的就是每次将fd_set遍历,判断标志位有没有发现变化,如果有变化则通知程序做中断处理。
发布于:1年前 (2023-03-16) IP属地:四川省
我来回答