我觉得epoll和select最大的区别

最近在用epoll,网速资料很多,大家都说epoll和select的区别比较大,而且select要不停遍历所有的fd,效率要低,而且fd有限制。

但是我认为二者最大的区别在于


先看代码

  while (1)
    {
nfds = epoll_wait(epfd, events, 20, 50000);
cout << nfds <<endl;
if(nfds == -1)
{
perror("epoll_wait");
continue;
}


for(int i =0; i<nfds; i++)
{
if(events[i].events & EPOLLIN)
{
recv_data(events[i].data.fd);
}
}
    }


epoll_wait返回nfds,是有事件的events的个数,在我的应用场景中一般都是0,难道在接下来的for循环中,由于nfds=1 而每次都只看events[0]事件吗,如果假设有20个事件,难道每次只看第一个吗。

所以events数组一直时动态变化的,发生事件的fd排在前面几个,而在select中,fd时固定的,所以需要它去遍历

因此我认为这才是二者最大的区别。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
回答: epollselect在调用接口上有一些不同。select和poll只提供了一个函数,而epoll提供了三个函数:epoll_create、epoll_ctl和epoll_wait。epoll_create用于创建一个epoll句柄,epoll_ctl用于注册要监听的事件类型,epoll_wait用于等待事件的产生。\[1\] epoll可以理解为event poll,它是事件驱动的,可以通知我们哪个流发生了怎样的I/O事件,而不是像select和poll那样进行忙轮询或无差别轮询。\[2\] epoll的复杂度降低到了O(1),相比之下,select的问题主要在于效率低下和每次调用都需要遍历所有的文件描述符,而epoll通过在Linux内核中申请一个简易的文件系统,将原来的select/epoll函数调用的过程分为三个部分,从而改善了这些问题。\[3\] #### 引用[.reference_title] - *1* *2* [深入理解select、poll和epoll区别](https://blog.csdn.net/wteruiycbqqvwt/article/details/90299610)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [epollselect区别](https://blog.csdn.net/weixin_51353093/article/details/127523254)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值