事件驅動編程

0. 基本概念
  • 窗口/組件

  • 事件

  • 消息(隊列)

  • 事件響應(服務處理程序)

  • 調度算法

  • 進程/線程

  • 非阻塞I/O

  • 程序的執(zhí)行可以看成對CPU,內存,IO資源一次占用

  • 現代操作系統支持多任務,可以分時復用上述資源.

1. 為什么采用事件驅動模型?

事件驅動模型也就是我們常說的觀察者闷盔,或者發(fā)布-訂閱模型;理解它的幾個關鍵點:

  • 首先是一種對象間的一對多的關系驾凶;最簡單的如交通信號燈,信號燈是目標(一方)立美,行人注視著信號燈(多方)盾似;
  • 當目標發(fā)送改變(發(fā)布)氓涣,觀察者(訂閱者)就可以接收到改變汪拥;
  • 觀察者如何處理(如行人如何走达传,是快走/慢走/不走,目標不會管的)喷楣,目標無需干涉趟大;所以就松散耦合了它們之間的關系鹤树。
2. 代碼執(zhí)行流程

在傳統的或“過程化”的應用程序中铣焊,應用程序自身控制了執(zhí)行哪一部分代碼和按何種順序執(zhí)行代碼。從第一行代碼執(zhí)行程序并按應用程序中預定的路徑執(zhí)行罕伯,必要時調用過程曲伊。
在事件驅動的應用程序中,代碼不是按照預定的路徑執(zhí)行-而是在響應不同的事件時執(zhí)行不同的代碼片段追他。事件可以由用戶操作觸發(fā)坟募、也可以由來自操作系統或其它應用程序調度算法的消息觸發(fā)、甚至由應用程序本身的消息觸發(fā)邑狸。這些事件的順序決定了代碼執(zhí)行的順序懈糯,因此應用程序每次運行時所經過的代碼的路徑都是不同的。

3. 事件驅動模型

在UI編程中单雾,常常要對鼠標點擊進行相應赚哗,首先如何獲得鼠標點擊呢?

方式一:創(chuàng)建一個線程硅堆,該線程一直循環(huán)檢測是否有鼠標點擊屿储,那么這個方式有以下幾個缺點:

  1. CPU資源浪費,可能鼠標點擊的頻率非常小渐逃,但是掃描線程還是會一直循環(huán)檢測够掠,這會造成很多的CPU資源浪費;如果掃描鼠標點擊的接口是阻塞的呢茄菊?
  2. 如果是堵塞的疯潭,又會出現下面這樣的問題,如果我們不但要掃描鼠標點擊面殖,還要掃描鍵盤是否按下袁勺,由于掃描鼠標時被堵塞了,那么可能永遠不會去掃描鍵盤畜普;
  3. 如果一個循環(huán)需要掃描的設備非常多期丰,這又會引來響應時間的問題;所以,該方式是非常不好的钝荡。

方式二:就是事件驅動模型目前大部分的UI編程都是事件驅動模型街立,如很多UI平臺都會提供onClick()事件,這個事件就代表鼠標按下事件埠通。事件驅動模型大體思路如下:

  1. 有一個事件(消息)隊列赎离;
  2. 鼠標按下時,往這個隊列中增加一個點擊事件(消息)端辱;
  3. 有個循環(huán)梁剔,不斷從隊列取出事件,根據不同的事件舞蔽,調用不同的函數荣病,如onClick()、onKeyDown()等渗柿;
  4. 事件(消息)一般都各自保存各自的處理函數指針个盆,這樣,每個消息都有獨立的處理函數朵栖;如圖:
Paste_Image.png
4. 事件驅動處理庫
  • select
  • poll
  • epoll
  • libev
參考資源

1. 事件驅動的機制是什么?
2. 經典軟件設計模型 - 事件驅動模型
3. 詳解Spring事件驅動模型
4. 百度知道:為什么事件驅動服務器這么火
5. IBM:分布式應用中基于事件驅動的應用開發(fā)模型

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末颊亮,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子陨溅,更是在濱河造成了極大的恐慌终惑,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,907評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件门扇,死亡現場離奇詭異雹有,居然都是意外死亡,警方通過查閱死者的電腦和手機悯嗓,發(fā)現死者居然都...
    沈念sama閱讀 92,987評論 3 395
  • 文/潘曉璐 我一進店門件舵,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人脯厨,你說我怎么就攤上這事铅祸。” “怎么了合武?”我有些...
    開封第一講書人閱讀 164,298評論 0 354
  • 文/不壞的土叔 我叫張陵临梗,是天一觀的道長。 經常有香客問我稼跳,道長盟庞,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,586評論 1 293
  • 正文 為了忘掉前任汤善,我火速辦了婚禮什猖,結果婚禮上票彪,老公的妹妹穿的比我還像新娘。我一直安慰自己不狮,他們只是感情好降铸,可當我...
    茶點故事閱讀 67,633評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著摇零,像睡著了一般推掸。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上驻仅,一...
    開封第一講書人閱讀 51,488評論 1 302
  • 那天谅畅,我揣著相機與錄音,去河邊找鬼噪服。 笑死毡泻,一個胖子當著我的面吹牛,可吹牛的內容都是我干的芯咧。 我是一名探鬼主播牙捉,決...
    沈念sama閱讀 40,275評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼竹揍,長吁一口氣:“原來是場噩夢啊……” “哼敬飒!你這毒婦竟也來了?” 一聲冷哼從身側響起芬位,我...
    開封第一講書人閱讀 39,176評論 0 276
  • 序言:老撾萬榮一對情侶失蹤无拗,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后昧碉,有當地人在樹林里發(fā)現了一具尸體英染,經...
    沈念sama閱讀 45,619評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,819評論 3 336
  • 正文 我和宋清朗相戀三年被饿,在試婚紗的時候發(fā)現自己被綠了四康。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,932評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡狭握,死狀恐怖闪金,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情论颅,我是刑警寧澤哎垦,帶...
    沈念sama閱讀 35,655評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站恃疯,受9級特大地震影響漏设,放射性物質發(fā)生泄漏。R本人自食惡果不足惜今妄,卻給世界環(huán)境...
    茶點故事閱讀 41,265評論 3 329
  • 文/蒙蒙 一郑口、第九天 我趴在偏房一處隱蔽的房頂上張望鸳碧。 院中可真熱鬧,春花似錦犬性、人聲如沸杆兵。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,871評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽琐脏。三九已至,卻和暖如春缸兔,著一層夾襖步出監(jiān)牢的瞬間日裙,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,994評論 1 269
  • 我被黑心中介騙來泰國打工惰蜜, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留昂拂,地道東北人。 一個月前我還...
    沈念sama閱讀 48,095評論 3 370
  • 正文 我出身青樓抛猖,卻偏偏與公主長得像格侯,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子财著,可洞房花燭夜當晚...
    茶點故事閱讀 44,884評論 2 354

推薦閱讀更多精彩內容