select和epoll区别

satuo20 1年前 ⋅ 447 阅读

1、select默认支持的文件描述符太少,只有1024,而epoll没有文件描述符限制。

2、每次调用select都要将文件描述符集合重构用户态拷贝到内核态,开销大;而epoll只在用epoll_ctl()函数进行事件注册时,会将文件描述符复制到内核。保证了每个文件描述符在epoll过程中只拷贝一次。

3、select是主动轮询机制,需要遍历文件描述符集合,并且只能得到某个文件描述符就绪的通知,不知道究竟是那个就绪,所以还需进行轮询查找就绪的文件描述符。epoll是被动触发机制,即给注册的每个文件描述符注册个回调函数,当数据准备好,就会把就绪的文件描述符加入到一个就绪队列中,epoll想要查看有没有就绪文件描述符,只需要看看就绪队列是否为空即可。( epoll_wait的工作方式实际上就是在这个就绪队列中查看有没有就绪的fd,如果有,就唤醒就绪队列上的等待者,然后调用回调函数。 )


全部评论: 0

    我有话说: