Reactor 設計模式是事件驅動的并發處理模式,高效處理多個輸入源的請求。多路分解事件,同步分發到處理器。
單線程 reactor 模型
redis6.0 之前采用單線程 reactor 模型。即業務線程完成網絡IO及命令處理。
reactor 模型處理三類事件:
- 連接事件。客戶端請求連接。
- 讀事情。實例讀取客戶端的命令。
- 寫事件。實例查詢得到的鍵值對返回給客戶端。
針對三類事件,Reactor 模型提出三個處理器:
acceptor:負責處理連接。建立連接后,創建 handler。
handler: 處理讀寫事件。
reactor:專門監聽和分配事件給 acceptor 或者 handler。
redis 實例啟動時,向 reactor 注冊連接事件,reactor 監聽客戶端發起的連接事件。
客戶端發起連接請求,reactor將連接事件分發給 acceptor 處理器。處理器將連接所關系的讀事件注冊到 reactor 。
客戶端發送命令,reactor 監聽到讀事件,將讀事件分發給讀處理器。
多線程 reactor 模型
redis 的性能瓶頸在網絡IO。因此 redis6.0 之后采用多線程 reactor 模型。
即業務線程將 IO 事件交給IO線程處理。業務線程只處理事件分發和讀取數據。