事件驅動程式設計

banq發表於2013-05-26
事件驅動程式設計是以事件為第一驅動的程式設計模型,提到事件,可能有很多容易混淆的概念,這裡的事件是指一種非同步併發的訊息模型,而普通的觀察者模式則沒有這個強調,觀察者和被觀察者之間通訊可以是同步機制。

同步機制的最大問題是會發生堵塞,不但導致效能大幅度降低,無法充分利用CPU潛力,浪費硬體投資,更重要造成軟體模組的鐵板化,緊耦合,無法切割,不利於日後擴充套件和變化。

非同步併發的概念非常符合日常生活中事件的定義,也應該是事件語義的重要核心,實際生活中,事件的觸發是無序且不可控的,對事件的響應當然要做到即時處理,如果用傳統執行緒機制同步處理響應,可能因鎖爭奪發生堵塞,結果導致大量事件未及時處理,非常沒有效率。

從客戶端和伺服器概念來看,客戶端發出大量事件到伺服器(如透過ajax等),伺服器應該是多執行緒響應,但是如果每個執行緒內部處理業務時發生堵塞,執行緒再多也沒有用,也就不能發揮伺服器高併發處理的能力。

所以,我們不只是在伺服器後端要選擇事件驅動的socket架構,如Node.js或Vert.x,還要用事件驅動的程式設計模型將我們的業務落地到它們上面執行。這樣才能在後端形成從底至上徹底的事件驅動架構

業務的事件驅動程式設計,實際上是將node.js的前後端socket事件驅動機制搬遷到業務領域模型和技術架構之間,正如瀏覽器或Iphone客戶端發出大量事件交由伺服器處理,領域模型也能發生大量事件需要技術架構響應處理,比如大量同時讀寫資料庫等等。這兩者的機制應該是一樣。

下面這個PPT是從伺服器的底層Socket的事件驅動架構上升到最高層業務邏輯的事件驅動程式設計,提出了聚合根的業務模型與Actor模型非常吻合的天然銜接。

事件驅動程式設計PPT下載

線上PPT

開源力量公開課第十九期- Java事件程式設計影片

完整影片下載:http://pan.baidu.com/share/link?shareid=3706618000&uk=2365734848

[該貼被admin於2013-09-18 14:46修改過]

相關文章