epoll 事件處理的細節分析2

來源:互聯網
上載者:User

準確的說epoll事件就是IO事件,包括檔案、socket、pipe等,linux把他們統稱為檔案,統一的介面調用,驅動層不同實現。

這裡分成四類:

監聽套餐接字,連結通訊端,檔案,pipe,相應的觸發條件

1.監聽通訊端:

有新連結連上臨聽通訊端,並三向交握成功時

2.連結通訊端

有IO讀寫,且傳輸層接收/發送完畢

3.普通檔案

有IO讀寫

4.pipe

有IO讀寫,且有鎖保護。

雖然有統一介面,但還是有區分的,先看epoll 源碼:

if (epi->event.events & EPOLLONESHOT)         epi->event.events &= EP_PRIVATE_BITS;else if (!(epi->event.events & EPOLLET)) {       list_add_tail(&epi->rdllink, &ep->rdllist); }

可以看到 當事件類型不是 EPOLLET時,會反覆觸發。

因此對於以上四種類型,1,3,4應該不加 EPOLLET,而第2種一定要加上 EPOLLET,否則當一個連結由客

戶端掛掉的時候,伺服器會不停的收到事件。

ET/LT實際上是電力上的概念,有兩種電路,一種裡面有高電阻,另外一個是有電容。

第一種情況,只有電壓達到一定的值的情況下才能導通,稱為水平觸發  eage triggered。

第二種情況,只有電壓發生變化的情況下才能導通, 稱為邊沿觸發,level triggered。

epoll 按照這個意思,對於LT,當有事件時,當有IO時就會一直觸 發,直到IO被完全傳送。

對於ET,有IO時觸發一次,IO消失時觸發一次,即上升沿下降沿。

這樣如果對監聽連結用ET的話,可能就會丟掉很多連結,而如對普通連結用LT的話就會做無用功。

這樣是不是更形象了?

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.