epoll与select处理I/O事件的性能和使用差异

1. Epoll 最大的优点就在于它只管你“活跃”的连接 ,而跟连接总数无关,因此在实际的网络环境中, Epoll 的效率就会远远高于 select和 poll 。

当有 I/O 事件到来时select会返回通知,应用程序需要轮询所有FD集合查找可读/写事件
int res = select(maxfd+1, &readfds, NULL, NULL, 100);
if (res > 0)
{
    for (int i = 0; i < MAX_CONNECTION; i++)
    {
        if (FD_ISSET(allConnection[i], &readfds))
        {
            handleEvent(allConnection[i]);
        }
    }
}
当有 I/O 事件到来时epoll会通知,并且返回所有I/O事件,应用程序无需遍历所有FD集合,在一个大规模并发的服务器中,轮询IO是最耗时间的操作之一.
int res = epoll_wait(epfd,events,20,100);
for(int i=0; i<res; i++)
{
   handleEvent(events[n]);
}

但是,如果没有大量的idle -connection或者dead-connection,epoll的效率并不会比select/poll高很多,只有当我们遇到大量的idle- connection(例如WAN环境中存在大量的慢速连接),才会发现epoll的效率大大高于select/poll。

从上面的分析可以看出,epoll相对select实际上是一个用空间换时间思想的具体应用.

2.Epoll 没有最大并发连接的限制,上限是最大可以打开文件的数目,这个数字一般远大于 2048, 一般来说这个数目和系统内存关系很大 ,具体数目可以 cat /proc/sys/fs/file-max 察看。

3.内存拷贝, Epoll 在这点上使用了“共享内存 ”,这个内存拷贝也省略了。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值