使用asio之前要先對它的設計思想有所了解,了解設計思想將有助於我們理解和應用asio。asio是基於proactor模式的,asio的proactor模式隱藏於大量的細節當中,要找到它的蹤跡,往往有種只見樹木不見森林之感,筆者將剖析asio中的proactor模式,一步一步揭開它的面紗,最終撥開雲霧,將一個完整的proactor模式還原出來。在剖析asio的proactor模式之前,我們先來看看常見的io設計模式。proactor(主動器)模式是一種重要的I/O設計模式,用來解決高並發網絡中遇到的問題,另外還有一種模式是reactor(反應器),libevent是基於reactor實現的,讓我們先看看這兩種模式的一些特點。
反應器需要應用程序先注冊事件處理器,然後啟動反應器的事件循環,不斷的檢查是否有就緒I/O事件,當有就緒事件時,同步事件多路分解器將會返回到反應器,反應器會將事件分發給多個句柄的回調函數以處理這些事件。【1】
反應器的一個特點是,具體的處理程序並不調用反應器,而是由反應器來通知處理程序去處理事件。這種方式也被稱為“控制反轉”,又稱為“好萊塢原則”。下面是反應器模式的類圖: