天天看点

5、epoll使用

1、epoll使用模型

示例程序1

5、epoll使用
5、epoll使用

View Code

2、示例使用【1】

示例程序2

5、epoll使用
5、epoll使用

3、socket有个listen队列,用来存放应用程序没有accept的连接。同样,epoll也有个wait queue。有一个关于epoll的数据结构常驻内核。

4、处理过程

1)select/poll

step1:准备fd;

step2:select

step2:process

step4:go to step1

2)epoll

step1:epoll_create

step2:epoll_wait

step3:process

step4:go to step2

5、非阻塞的模式,当errno为EAGAIN时,表示当前缓冲区已无数据可读。当写缓冲已满,此时send()返回-1,且errno为EAGAIN,这种情况,我们封装send时要处理。

设计成ET模式下的读模型

5、epoll使用
5、epoll使用

设计成ET模式下的写模型

5、epoll使用
5、epoll使用

6、UDP没有流的概念,而是数据包;也就是说读一次,缓存足够下,如果成功,则肯定读了一个包;否则失败。

7、ET是状态的;也就是说,只在状态发生改变时,他才会进行通知;比如缓存由不可读状态变成可读状态,则进行一次通知;所以,一旦wait成功,则要一直读,读到不能读,状态发生变化为止。而LT是基于事件的,也就是每发生一个事件,就会通知一次,比如有新的数据包到达,这就是一个事件,就会有一次通知。

附:其它关联词汇

1、AIO:Asynchronous Input/Output异步输入/输出是任何特殊输入/输出流(同步和异步输入/输出)两个基本操作模式之一。在异步模式中,自然的输入/输出事务不必须和一个程序的输入/输出状态同步或互锁。

参考:

【1】 epoll的相关概念和使用

<a href="http://baike.baidu.com/view/1385104.htm">http://baike.baidu.com/view/1385104.htm</a>

<a href="http://www.cnblogs.com/OnlyXP/archive/2007/08/10/851222.html">http://www.cnblogs.com/OnlyXP/archive/2007/08/10/851222.html</a>

文章中举了一个实例:

<a href="http://blogold.chinaunix.net/u/16292/showart_1844376.html">http://blogold.chinaunix.net/u/16292/showart_1844376.html</a>

<a href="http://www.vimer.cn/2009/11/epoll%E4%BD%BF%E7%94%A8%E5%AE%9E%E4%BE%8B%E8%AF%B4%E6%98%8E.html">http://www.vimer.cn/2009/11/epoll%E4%BD%BF%E7%94%A8%E5%AE%9E%E4%BE%8B%E8%AF%B4%E6%98%8E.html</a>