? ?一、Reactor模式
Reactor模式,它要求主線程(I/O處理單元)只負責監聽文件描述符上是否有事件發生,有的話就立即將該事件通知工作線程(邏輯單元)。除此之外,主線程(I/O處理單元)不作任何其他實質性工作。讀寫數據,接收新的連接,以及處理客戶請求均在工作線程(邏輯單元)完成。
使用同步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上寫入服務器處理客戶請求的結果。