IO 中 Reactor和Proactor 設計模式
1.Reactor模式和Proactor模式
其實阻塞與非阻塞都可以理解為同步範疇下才有的概念,對於非同步,就不會再去分阻塞非阻塞。對於使用者程式,接到非同步通知後,就直接操作程式使用者態空間裡的資料好了。
1.首先來看看Reactor模式,Reactor模式應用於同步I/O的場景。我們分別以讀操作和寫操作為例來看看Reactor中的具體步驟:
讀取操作:
1.應用程式註冊讀就緒事件和相關聯的事件處理器
2.事件分離器等待事件的發生
3.當發生讀就緒事件的時候,事件分離器呼叫第一步註冊的事件處理器
4.事件處理器首先執行實際的讀取操作,然後根據讀取到的內容進行進一步的處理
寫入操作類似於讀取操作,只不過第一步註冊的是寫就緒事件。
2.下面我們來看看Proactor模式中讀取操作和寫入操作的過程:
讀取操作:
1.應用程式初始化一個非同步讀取操作,然後註冊相應的事件處理器,此時事件處理器不關注讀取就緒事件,而是關注讀取完成事件,這是區別於Reactor的關鍵。
2.事件分離器等待讀取操作完成事件
3.在事件分離器等待讀取操作完成的時候,作業系統呼叫核心執行緒完成讀取操作(非同步IO都是作業系統負責將資料讀寫到應用傳遞進來的緩衝區供應用程式操作,作業系統扮演了重要角色),並將讀取的內容放入使用者傳遞過來的快取區中。這也是區別於Reactor的一點,Proactor中,應用程式需要傳遞快取區。
4.事件分離器捕獲到讀取完成事件後,啟用應用程式註冊的事件處理器,事件處理器直接從快取區讀取資料,而不需要進行實際的讀取操作。
Proactor中寫入操作和讀取操作,只不過感興趣的事件是寫入完成事件。
從上面可以看出,Reactor和Proactor模式的主要區別就是真正的讀取和寫入操作是有誰來完成的,Reactor中需要應用程式自己讀取或者寫入資料,而Proactor模式中,應用程式不需要進行實際的讀寫過程,它只需要從快取區讀取或者寫入即可,作業系統會讀取快取區或者寫入快取區到真正的IO裝置.
綜上所述,同步和非同步是相對於應用和核心的互動方式而言的,同步 需要主動去詢問,而非同步的時候核心在IO事件發生的時候通知應用程式,而阻塞和非阻塞僅僅是系統在呼叫系統呼叫的時候函式的實現方式而已。
相關文章
- 【Linux網路程式設計】Reactor模式與Proactor模式Linux程式設計React模式
- 高效能的Reactor和Proactor模式學習React模式
- 兩種高效能I/O設計模式(Reactor/Proactor)的比較設計模式React
- Linux(伺服器程式設計):15---兩種高效的事件處理模式(reactor模式、proactor模式)Linux伺服器程式設計事件模式React
- 圖解高效能網路架構:Reactor 和 Proactor圖解架構React
- 一篇文章讀懂Reactor和Proactor兩種I/O多路複用模式React模式
- 設計模式-裝飾模式概述和使用-IO流設計模式
- 設計模式 in real world - 反應器模式(Reactor Pattern)設計模式React
- Reactor 模式React模式
- Reactor模式React模式
- SimpleRpc-網路事件響應Reactor設計模式RPC事件React設計模式
- 從設計模式分析Java.IO設計模式Java
- Reactor模式理解React模式
- IO和socket程式設計程式設計
- 【轉】JAVA IO 設計模式徹底分析Java設計模式
- 設計模式(九)——裝飾者模式(io原始碼分析)設計模式原始碼
- Reactor模式理解(二)React模式
- 從io模型到ppc,tpc,reactor,preactor模型React
- IO模式設定網路程式設計常見問題總結—IO模式設定,阻塞與非阻塞模式程式設計
- Reactor中的Thread和SchedulerReactthread
- IO程式設計和NIO程式設計簡介程式設計
- Java中的設計模式和原則Java設計模式
- 【設計模式】漢堡中的設計模式——策略模式設計模式
- 【設計模式】漢堡中的設計模式——觀察者模式設計模式
- 使用Reactor響應式程式設計React程式設計
- IO模式和IO多路複用(阻塞IO、非阻塞IO、同步IO、非同步IO等概念)模式非同步
- 多執行緒Reactor模式執行緒React模式
- 設計模式-模版設計模式概述和使用-抽象類設計模式抽象
- 設計模式中的觀察者模式設計模式
- PHP 實戰之設計模式:PHP 中的設計模式PHP設計模式
- Ruby中的設計模式設計模式
- php中的設計模式PHP設計模式
- javascript中的設計模式JavaScript設計模式
- Mybatis中的設計模式MyBatis設計模式
- PHP 中的設計模式PHP設計模式
- Jive 中的設計模式設計模式
- JavaScript 設計模式 : 生活中的'介面卡'和'裝飾者'模式JavaScript設計模式
- JavaScript 和 jQuery 設計模式JavaScriptjQuery設計模式