Reactor模式
它要求主線程(I/O處理單元)只負責監聽文件描述符上是否有事件發生,有的話就立即將該事件通知工作線程(邏輯單元)
除此之外主線程不做其他實質性的工作,讀寫數據以及接受新的連接,以及處理客戶請求均在客戶線程中完成。
使用同步I/O模型(以epoll_wait爲例)實現的Reactor模式的工作流程:
1)主線程往epoll內核事件表中註冊socket上的讀就緒事件。
2)主線程調用epoll_wait等待socket上有數據可讀。
3)當epoll_wait有數據可讀時,epoll_wait通知主線程。
主線程則將socket可讀事件放入請求隊列。
4)睡眠在請求隊列上的某個工作線程被喚醒,它從socket讀取數據並處理客戶請求。
然後往epoll內核事件表中註冊該socket上的寫就緒事件
5)主線程調用epoll_wait等待socket可寫
6)當socket可寫時,epoll_wait通知主線程。
主線程將socket可寫事件放入請求隊列
7)睡眠在請求隊列上的某個工作線程被喚醒,它往socket上寫入服務器處理客戶請求的結果。
工作線程從請求隊列取出事件後,將根據事件的類型來決定如何處理它
對於可讀事件,執行讀數據和處理請求的操作
對於可寫事件,執行寫數據的操作。