原文地址:http://name5566.com/4175.html
參考文獻列表:
http://www.artima.com/articles/io_design_patterns2.html
通常來說,I/O 多路復用機制(I/O multiplexing mechanisms)依賴于一個事件多路分用器(Event demultiplexor)。我們常見的事件多路分用器包括:Linux 的 EPOLL 和 Windows 的 IOCP(如果你使用過 IOCP 或者 EPOLL,那么會更加容易理解相關內容)。一個多路分用器分發 I/O 事件到特定的事件處理函數上。對于開發者來說,他只需要注冊感興趣的事件并且提供事件處理函數。事件多路分用器負責遞交事件到事件處理函數上。和事件多路分用器相關的兩個設計模式為 Proactor 和 Reactor。
Proactor 模式
Windows IOCP 使用 Proactor 模式。Proactor 模式使用異步 I/O。Proactor 的標準(典型)的工作方式是:
Proactor 等待事件
Proactor 讀或寫數據
Proactor 分發 I/O 完成事件到用戶事件處理函數
用戶處理數據
Proactor 模式下,用戶在調用異步 I/O 時會傳遞一個 Buffer 給系統,系統進行實際的 I/O 操作并從傳遞給系統的 Buffer 中獲取或者放入數據。
Reactor 模式
Linux EPOLL 使用 Reactor 模式。Reactor 模式使用同步 I/O(一般來說)。Reactor 的標準(典型)的工作方式是:
Reactor 等待事件
Reactor 分發可讀寫事件到用戶事件處理函數
用戶讀取數據
用戶處理數據
與 Proactor 模式相比,Reactor 模式下,用戶有責任在收到可讀寫事件后進行實際的 I/O 操作。
Proactor 模式和 Reactor 模式可以相互轉換,詳細可以參考:http://www.artima.com/articles/io_design_patterns2.html