兩種高效的事件處理方式

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上寫入服務器處理客戶請求的結果。

工作線程從請求隊列取出事件後,將根據事件的類型來決定如何處理它

對於可讀事件,執行讀數據和處理請求的操作

對於可寫事件,執行寫數據的操作。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章