select和epoll的比较就不用多说了。ACE在linux下默认使用select来实现Reactor的。如何在linux下让ACE使用epoll。html
1.加一个编译宏,告诉ACE不要使用默认的select,而是用EVENT_POLL。react
2.而后从新编译ACE的工程。linux
3.在你的程序中使用时: shell
#include "ace/Dev_Poll_Reactor.h" ACE_Dev_Poll_Reactor dev_reactor(4000); // 系统对每一个进程打开文件的限制,ulimit -n ACE_Reactor reactor(&dev_reactor); // 4000为最大的打开数目 ACE_Reactor::instance(&reactor);
4. 从新编译你的程序便可ide
你可能会遇到下面的错误:spa
错误:ACE_Dev_Poll_Reactor::open failed inside ACE_Dev_Poll_Reactor::CTOR:code
这个是linux的一些限制,能够配置新的值。EPOLL能处理的最大描述符数受用户可打开的最大描述符数限制,通常默认1024,可用ulimit -a查看,
修改方法两个:htm
1.ulimit -n 5120 #每次登陆到shell都要修改,只对本次登陆有效。进程
2.用ROOT用户修改/etc/security/limits.conf,添加如下两行,而后从新登陆便可。修配配置文件后全局有效。rem
* soft nofile 5120 * hard nofile 10240