課二 前攝器設計模式(不使用多執行緒併發)

2022-08-18 07:18:13 字數 1761 閱讀 1902

asio庫為同步和非同步提供一一對應的操作。非同步支援是基於前攝器設計模式。該模式的優勢和劣勢將在下面說明,與之對應的是反射器模式,該模式是一種同步模式。

前攝器的實現:

在asio庫中,前攝器的實現方式如下,該實現方式跨平台一致。

前攝器設計模式:

一、非同步操作

定義乙個非同步執行的操作,例如在乙個套接字上進行非同步的讀寫。

二、非同步操作處理

執行非同步操作並當操作結束時,執行事件完成佇列上的某個事件。從更高的層次看,如    stream_socket_service 這樣的服務均是非同步操作處理器。

三、事件完成佇列

儲存完成事件,直到這些事件出隊,通過非同步事件分離器將會引導事件的出隊。

四、完成處理函式

處理函式用於處理非同步操作的返回結果。均為函式物件,採用boost::bind來實現。

五、非同步事件分離器

非同步事件分離器將會阻塞等待非同步完成事件佇列產生新的事件,並且返回乙個已完成的事件給呼叫方。

六、前攝器

呼叫非同步事件分離器使事件出隊,並註冊事件處理函式。該抽象設計典型代表類如io_service。

七、呼叫方

由應用程式呼叫方開始非同步操作。呼叫方通過上層介面如basic_stream_socket同非同步操作處理器互動,

而上層介面反過來委託乙個服務如stream_socket_service來處理互動。

反射器的實現:

很多平台,asio庫以反射器的方式來實現前攝器的設計模式,例如select、epoll或kqueue等i/o復用函式。這些

實現與前攝器設計模式相近的地方如下:

一、 非同步操作處理器

反射器的實現採用select、epoll或kequeue等函式。當乙個反射器表明某資源已經準備執行操作時,處理器執行非同步操作並且將相關的完成事件處理函式插入完成事件佇列中。

二、完成事件佇列

完成事件佇列為多個處理完成事件的**函式構成的鍊錶。

三、非同步事件分離器

非同步事件分離器實現的方式是通過等待某一事件的發生或條件變數的變化且可以獲取完成事件處理函式。

windows系統重寫i/o操作

在window nt,2000和xp作業系統上,asio庫利用過載i/o的方式來提供一種有效的前攝器實現。這種實現的模式

大致如下:

一、 非同步操作處理器

這個過程由作業系統實現,各類操作由過載函式來初始化,過載函式如aceptex。

二、完成事件佇列

該實現由作業系統來完成,並且同i/o埠有關,對於每個io_service例項,都存在一種i/o完成埠。

三、非同步事件分離器

由asio呼叫來進行事件出隊操作,這些事件都與事件處理函式繫結。

優勢:一、可移植性。

許多作業系統提供原生的非同步i/o介面(如windows上面的i/o過載介面),這些i/o介面可能以原生非同步i/o來實現。然而,如果原生支援不可用,這些非同步庫可採用同步事件分離器來實現,作為一種典型反射器應用,如

posix select函式。

二、併發多執行緒

長持續時間的操作表現出非同步操作性,乙個應用程式就是典型代表。因此,應用程式不需要呼叫太多執行緒來增加併發性。

三、效能和可伸縮性

採用每個執行緒處理乙個連線的方式將會降低系統效能,這主要是因為增加了上下文的切換,同步處理和資料遷移。採用非同步操作為避免上下文切換消耗,通過最小化作業系統執行緒數且只啟用處理事件的邏輯執行緒。

ACE前攝器Proactor模式

當os 平台支援非同步操作時,一種高效而方便的實現高效能 web 伺服器的方法是使用前攝式事件分派。使用前攝式事件分派模型設計的 web 伺服器通過一或多個執行緒控制來處理非同步操作的完成。這樣,通過整合完成事件多路分離 completion event demultiplexing 和事件處理器分...

ACE前攝器Proactor模式 收藏

ace前攝器proactor模式 收藏 標籤 當 os 平台支援非同步操作時,一種高效而方便的實現高效能 web 伺服器的方法是使用前攝式事件分派。使用前攝式事件分派模型設計的 web 伺服器通過一或多個執行緒控制來處理非同步操作的完成。這樣,通過整合完成事件多路分離 completion even...

設計模式第二堂課

uml 1.use case diagram 用例圖 矩形框 system boundary 系統邊界 用例之間的關係 include extend 基用例 include 包含用例 擴充套件用例 extend 基用例 business progress業務邏輯 過程 步驟 操作 動作 事件 頭腦風...