同步i/o模型通常用於實現reactor模式,非同步i/o模型則用於實現proactor模式。
使用同步 i/o 模型(以 epoll_wait 為例)實現的 reactor 模式的工作流程是:
主線程往 epoll 核心事件表中註冊 socket 上的讀就緒事件。
主線程呼叫 epoll_wait 等待 socket 上有資料可讀。
當 socket 上有資料可讀時, epoll_wait 通知主線程。主線程則將 socket 可讀事件放入請求佇列。
睡眠在請求佇列上的某個工作執行緒被喚醒,它從 socket 讀取資料,並處理客戶請求,然後往 epoll 核心事件表中註冊該 socket 上的寫就緒事件。
主線程呼叫 epoll_wait 等待 socket 可寫。
當 socket 可寫時,epoll_wait 通知主線程。主線程將 socket 可寫事件放入請求佇列。
睡眠在請求佇列上的某個工作程序被喚醒,它往 socket 上寫入伺服器處理客戶請求的結果。
參考:《linux高效能伺服器程式設計》 遊雙
reactor設計模式
reactor設計模式,是一種基於事件驅動的設計模式。pattern oriented software architecture,volume 2 對這個模式做了詳細的講解。這個模式的結構圖如下 圖中的handle對應的是作業系統提供的控制代碼,例如i o控制代碼,event handler類持有...
設計模式 reactor
先看個段子吧,更好理解 reactor這個詞譯成漢語還真沒有什麼合適的,很多地方叫反應器模式,但更多好像就直接叫reactor模式了,其實我覺著叫應答者模式更好理解一些。通過了解,這個模式更像乙個侍衛,一直在等待你的召喚,或者叫召喚獸。併發系統常使用reactor模式,代替常用的多執行緒的處理方式,...
Reactor設計模式
reactor這個詞譯成漢語還真沒有什麼合適的,很多地方叫反應器模式,但更多好像就直接叫reactor模式了,其實我覺著叫應答者模式更好理解一些。通過了解,這個模式更像乙個侍衛,一直在等待你的召喚,或者叫召喚獸。併發系統常使用reactor模式,代替常用的多執行緒的處理方式,節省系統的資源,提高系統...