天天看點

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>