epoll的问题
下面是关于epoll使用的部分代码:
nfds = epoll_wait(kdpfd, events, maxevents, -1);
for (n = 0; n < nfds; ++n) {
if (events[n].data.fd == listener) { // 如果是主socket的事件的话,则表示
// 有新连接进入了,进行新连接的处理。
} else if (event[n].events & EPOLLIN) { // 如果是已经连接的用户,并且收到数据,
// 那么进行读入
} else if (event[n].events & EPOLLOUT) { // 如果有数据发送
}
do_use_fd(events[n].data.fd);
}
问题1:如果nfds是1000,而且这1000个都是数据发送事件,每个数据发送事件要占用1秒,那是不是要顺序执行1000次发送操作,也就是1000秒?
问题2:如果在发送期间又有新的用户来请求会怎样?请求失败?
------解决方案--------------------
先搞明白,select/poll/epoll这些I/O多路复用API的作用:用来**同时监听**大量socket的可读/可写***事件***的。。至于发送/接收socket与此无关了。
效率为什么高,请移步到这篇文章中:http://hi.baidu.com/itaolei/item/ce26085dec47883f33e0a99c
------解决方案--------------------如果处理需要很长时间才能完成的事件,应该配合多进程或多线程了吧
epoll等多路io复用的函数,我认为就是解决了轮询的问题