select
- 1、每次调用
select需要把fd集合从用户态拷贝到内核态,这个开销在fd很多时会很大 - 2、每次调用
select都需要在内核遍历传进来的fd, 这个开销在fd很多时也很大 - 3、
select支持的文件描述符太少了,默认是 1024
epoll
-
epoll提供了三个函数-
epoll_create:创建句柄,内核在内核态开始准备存储要监控的句柄 -
epoll_ctl:对指定文件描述符进行OP操作 -
epoll_wait:等待事件的产生
-
- 1、针对第一个缺点:
epoll_ctl会将fd拷贝到内核中epoll句柄对应的数据体,epoll保证了每个fd在整个过程中只会拷贝一次,避免了重复拷贝 - 2、针对第二个缺点:
epoll_ctl会给 fd 注册回调函数,当设备就绪,执行回调函数会把 fd 添加到就绪列链表,epoll_wait实际上只是从就绪链表中查询是否有就绪的fd - 3、针对第三个缺点:
epoll没有这个限制,他所支持的上限是最大可以打开的文件数目







网友评论