epoll的再次認識

使用mmap加速內核與用戶空間的消息傳遞。
這 點實際上涉及到epoll的具體實現了。無論是select,poll還是epoll都需要內核把FD消息通知給用戶空間,如何避免不必要的內存拷貝就很 重要,在這點上,epoll是通過內核于用戶空間mmap同一塊內存實現的。而如果你想我一樣從2.5內核就關注epoll的話,一定不會忘記手工 mmap這一步的。


順便看一下 EPOLLET 和 EPOLLLT
EPOLLLT 是默認行為,基本上就是說,只要一個文件描述符處于就緒狀態,epoll 就會不停的通知你有事件發生。傳統的 select/poll 都是這樣的

EPOLLET 是新的方式,只在一個文件描述符新處于就緒的時候通知一次,之后不管數據有沒有讀完,都不會再通知,當然,有新數據到還是會通知的。所以,用 EPOLLET 的時候,一定要把文件描述符設置為 non-blocking,而且最好是一直讀數據,讀到返回 EAGAIN 才停下


EPOLLOUT事件:
EPOLLOUT事件只有在連接時觸發一次,表示可寫,其他時候想要觸發,那要先準備好下面條件:
1.某次write,寫滿了發送緩沖區,返回錯誤碼為EAGAIN。
2.對端讀取了一些數據,又重新可寫了,此時會觸發EPOLLOUT。
簡單地說:EPOLLOUT事件只有在不可寫到可寫的轉變時刻,才會觸發一次,所以叫邊緣觸發,這叫法沒錯的!
其實,如果真的想強制觸發一次,也是有辦法的,直接調用epoll_ctl重新設置一下event就可以了,event跟原來的設

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/444802.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/444802.shtml
英文地址,請注明出處:http://en.pswp.cn/news/444802.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

leetcode82. 刪除排序鏈表中的重復元素 II

給定一個排序鏈表,刪除所有含有重復數字的節點,只保留原始鏈表中 沒有重復出現 的數字。 示例 1: 輸入: 1->2->3->3->4->4->5 輸出: 1->2->5 示例 2: 輸入: 1->1->1->2->3 輸出: 2->3 思路:判斷n…

C++(16)--運算符重載(自定義Integer類)

運算符重載1.運算符重載--重點2.友元函數--難點(流運算符重載)《老九學堂C課程》《C primer》學習筆記。《老九學堂C課程》詳情請到B站搜索《老九零基礎學編程C入門》 -------------簡單的事情重復做,重復的事情用心做,用心的事情堅持做(老九君)--------…

反應器組件 ACE_Reactor

6.1 反應器組件 ACE_Reactor反應器的基本原理是: 針對關心的某個事件寫一個事件處理器(event_handler). 將該事件處理器登記到反應器中(同時指明關心的事件). 然后反應器會自動檢測事件的發生. 并調用預先登記的事件處理器中的回調函數. 所以ACE Reactor 框架的責任&#x…

C++(17)--詳解const

詳解const《老九學堂C課程》《C primer》學習筆記。《老九學堂C課程》詳情請到B站搜索《老九零基礎學編程C入門》-------------簡單的事情重復做,重復的事情用心做,用心的事情堅持做(老九君)---------------1.const修飾成員變量 2.const修飾函數參數 3.c…

cppcheck的安裝和使用

首先從這里下載linux版本的:http://sourceforge.net/projects/cppcheck/files/cppcheck/ 然后下載對應的版本,解壓,之后安裝: 編譯: g++ -o cppcheck -Ilib cli/*.cpp lib/*.cpp 安裝: make install

leetcode24 兩兩交換鏈表中的節點

給定一個鏈表,兩兩交換其中相鄰的節點,并返回交換后的鏈表。 你不能只是單純的改變節點內部的值,而是需要實際的進行節點交換。 示例: 給定 1->2->3->4, 你應該返回 2->1->4->3. 思路:這一看就是個遞歸定義&…

再議指針和引用的一些事情吧

關于指針和引用一直是學習C++的同學們爭論的焦點,什么時候用指針,什么時候用引用,還有怎么引用數組,這么用指針訪問數組,以及初始化的問題。 不過有一些文章我在很早就已經寫過,但是由于當時時間不充分,自己也都是隨性寫的,可以參看以前我的一個文章:http://blog.csd…

C++(18)--復制構造函數

復制構造函數《老九學堂C課程》《C primer》學習筆記。《老九學堂C課程》詳情請到B站搜索《老九零基礎學編程C入門》-------------簡單的事情重復做,重復的事情用心做,用心的事情堅持做(老九君)---------------包裝基本類,封裝一些算法。 需求…

lua與C++粘合層框架

一. lua調用C 在lua中是以函數指針的形式調用函數, 并且所有的函數指針都必須滿足如下此種類型: typedef int (*lua_CFunction) (lua_State *L);   也就是說, 偶們在C中定義函數時必須以lua_State為參數, 以int為返回值才能被Lua所調用. 但是不要忘記了, 偶們的lua_State是…

leetcode147 對鏈表進行插入排序

丟人,我就是按插入排序老老實實寫的啊。。。。 別人肯定map了hhh。 對鏈表進行插入排序。 插入排序的動畫演示如上。從第一個元素開始,該鏈表可以被認為已經部分排序(用黑色表示)。 每次迭代時,從輸入數據中移除一個…

PaperNotes(13)-Conditional Image Generation with PixelCNN Decoders

conditional Image generation with PixelCNN DecodersICML的best paperpixel cnn 屬于完全可見的信念網絡,需要對 概率密度 建模。給定圖像數據x,想要對概率分布p(x)建模。概率分布p(x)可以看做,每一像素分布同時作用結果的一個聯合分布。一…

Expression : invalid operator 解決方法

從技術上說,用于排序關聯容器的比較函數必須在它們所比較的對象上定義一個“嚴格的弱序化(strict weak ordering)”。(傳給sort等算法的比較函數也有同樣的限制),就是兩個對象比大小或先后的規則,比如兩個 string對象比大小的規則…

leetcode23 合并K個排序鏈表

合并 k 個排序鏈表,返回合并后的排序鏈表。請分析和描述算法的復雜度。 示例: 輸入: [ 1->4->5, 1->3->4, 2->6 ] 輸出: 1->1->2->3->4->4->5->6 思路:把初始的每一個鏈表當成數組中的一個數,做…

Xcode LaunchImage 載入界面大小設置

iPhone Portrait iOS 8-Retina HD 5.5 (12422208) @3x iPhone Portrait iOS 8-Retina HD 4.7 (7501334) @2x iPhone Portrait iOS 7,8-2x (640960) @2x iPhone Portrait iOS 7,8-Retina 4 (6401136) @2x iPhone Portrait iOS 5,6-1x (320480) @1x iPhone Portrait iO…

leetcode237 刪除鏈表中的節點(你意想不到的做法,注意細節)

請編寫一個函數,使其可以刪除某個鏈表中給定的(非末尾)節點,你將只被給定要求被刪除的節點。 現有一個鏈表 -- head [4,5,1,9],它可以表示為: 示例 1: 輸入: head [4,5,1,9], node 5 輸出: [4,1,9] 解釋: 給定你鏈…

cppcheck值得注意的一些篩選項

使用完cppcheck進行C代碼檢測之后,可能篩選起來很麻煩,一般常見的優化有 emptiness,就是當你使用stl的時候,最好用empty替代size 還有就是 leak

C++(19)--自定義Array,vector練習

自定義Array,vector1.自定義Array2.自定義vector《老九學堂C課程》《C primer》學習筆記。《老九學堂C課程》詳情請到B站搜索《老九零基礎學編程C入門》-------------簡單的事情重復做,重復的事情用心做,用心的事情堅持做(老九君)---------------1.自定義…

讓cocos2dx支持并通過arm64 編譯

為了要支持64位,請把這個文件直接替換到對應的lib目錄下,本來是需要改neton_matrix_impl.c里的宏定義, 在 platform/ios/EAGLVIEW.mm中 在neon_matrix_impl.c中修改 #if defined(__ARM_NEON__) 為#if defined(_ARM_ARCH_7) 還有 third_party目錄下的curl的支持。

springboot——概述

Spring Boot 介紹 Spring Boot 是由 Pivotal 團隊提供的全新框架,其設計?的是?來簡化新 Spring 應? 初始搭建以及開發過 程,該框架使?了特定的?式來進?配置,從?使開發?員不再需要定義樣板化的配置。 默認配置了很多框架的使??式…

C++(20)--類型自動轉換

類型自動轉換1.C內置類型轉換2.實現自定義類的類型轉換《老九學堂C課程》《C primer》學習筆記。《老九學堂C課程》詳情請到B站搜索《老九零基礎學編程C入門》 -------------簡單的事情重復做,重復的事情用心做,用心的事情堅持做(老九君)---------------…