设为首页 加入收藏

TOP

Linux Epoll的使用方法
2014-11-24 07:29:20 来源: 作者: 【 】 浏览:2
Tags:Linux Epoll 使用方法

epoll的优势?


这个可能大家都知道,我稍微提一下:1、每次调用epoll的侦听函数epoll_wait时,它只会返回确实有事件发生的那些套接字,而不会返回所有注册的套接字,显然,这个会增强效率,特别是对于那些有大量的套接字,但套接字大多时候是处于休眠状态的场景;2、能够支持大量的套接字的同时监管:理论上讲,epoll能够支持整形所能表示的最大数值个套接字的监管(但实际上,这个上限往往由于机器体系结构、内存限制、网络限制等而不能达到);3、epoll所特有的ET模式,能够让你的CPU做“真正该做的事情”。


如何使用好ET模式?


ET模式最为人诟病的就是事件有时候不能被处理掉(往往由于用户会选择性地处理事件,比如,有可写事件到达,但我没有需要写的数据,于是就忽略该事件),导致该描述符后来对应的该事件不再被反应给用户。相当于,这个描述符已经淡出了用户的视野,成为了一个“死的”描述符,它将再不能被用户感知到。


实际上,可以有两种措施来避免这种情况的发生:


1、当“可读”事件到达时,就一直读这个描述符,知道该描述符不可读为止,这保证了此次事件通知被有效处理了,那么下次改描述符的该事件发生,系统还会通知用户。


还有什么需要注意的?


1、如果涉及到大量连接的话,需要修改/etc/sysctl.conf文件中的几项,另外,单个套接字的接收缓冲区和发送缓冲区也需要设置(包括配置文件和程序中调用setsockopt函数)。再有就是如果单机连接数需要上20w以上的话,最好是拿64位机子做服务器,因为32位机子的系统内存只有1G,很难容下大量套接字缓冲区的。


2、还是老生常谈,尽量减少内存拷贝。


epoll到底有多厉害?


在笔者的实际应用中,单机并发连接数达到过18w(网络环境不怎么样,带宽只有100Mb/s),网上有的人已经测试过能达到50w级别的。当然,这个只是给大家一个直观的了解,具体能到多少连接数,以及数据吞吐率怎么样,那要视您的环境以及业务需求了。


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇C++建立动态链表 下一篇Linux 2.6内核Epoll用法举例说明

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·数据库:推荐几款 Re (2025-12-25 12:17:11)
·如何最简单、通俗地 (2025-12-25 12:17:09)
·什么是Redis?为什么 (2025-12-25 12:17:06)
·对于一个想入坑Linux (2025-12-25 11:49:07)
·Linux 怎么读? (2025-12-25 11:49:04)