读书人

epoll的有关问题

发布时间: 2013-07-27 22:21:01 作者: rapoo

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:如果在发送期间又有新的用户来请求会怎样?请求失败?
[解决办法]
引用:
Quote: 引用:

Quote: 引用:

Quote: 引用:

操作系统内核中会维护每个socket对应的收,发缓存。然后同上。

我想问下内核是不是顺序处理请求的呢?

你觉得呢?TCP协议是不是顺序的呢?

如果是顺序的话, 如果有一个连接要处理很长时间,那其他连接都要在那边等,那epoll的高效体现在哪里呢?


先搞明白,select/poll/epoll这些I/O多路复用API的作用:用来**同时监听**大量socket的可读/可写***事件***的。。至于发送/接收socket与此无关了。
效率为什么高,请移步到这篇文章中:http://hi.baidu.com/itaolei/item/ce26085dec47883f33e0a99c
[解决办法]
如果处理需要很长时间才能完成的事件,应该配合多进程或多线程了吧
epoll等多路io复用的函数,我认为就是解决了轮询的问题

读书人网 >UNIXLINUX

热点推荐