Reactor 模式是什麼

Wiki:反應堆設計模式是一種事件處理模式,用於處理通過一個或多個輸入同時交付給服務處理程序的服務請求。然後,服務處理程序對傳入的請求進行多路分解,並將它們同步分發到關聯的請求處理程序 -- https://en.wikipedia.org/wiki/Reactor_pattern

Reactor是一種廣泛應用在服務器端開發的設計模式。Reactor中文大多譯爲“反應堆”,實際上,Reactor模式又有別名“Dispatcher”或者“Notifier”,我認爲譯爲“Notifier”更貼切Reactor模式的本質。

對於應用服務器,一個主要規律就是,CPU的處理速度是要遠遠快於IO速度的,如果CPU爲了IO操作(例如從Socket讀取一段數據)而阻塞顯然是不划算的。好一點的方法是分爲多進程或者線程去進行處理,但是這樣會帶來一些進程切換的開銷。

上述問題的解決辦法是:利用事件驅動,或者叫回調的方式,來完成這件事情。這種方式就是,應用業務向一個中間人註冊一個回調(event handler),當IO就緒後,就這個中間人產生一個事件,並通知此handler進行處理。

由一個不斷等待和循環的單獨進程(線程)來做這件事,它接受所有handler的註冊,並負責先向操作系統查詢IO是否就緒,在就緒後就調用指定handler進行處理,這個角色的名字就叫做Reactor,Reactor即爲中間人。

單線程Reactor模式

多線程Reactor模式

 

參考:

Netty源碼解讀(四)Netty與Reactor模式:http://ifeve.com/netty-reactor-4/

Reactor 模式:https://juejin.im/post/5bbd9b546fb9a05d2068651c

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章