這篇文章帶大家聊聊Redis中單線程的reactor模型,I/O模型,還有多線程版本I/O模型,希望對大家有幫助!
redis 的高效能
- #純記憶體訪問,所有資料都在記憶體中,所有的運算都是記憶體層級的運算,記憶體回應時間的時間為奈秒等級。因此redis 進程的cpu 基本上不存在磁碟I/O 等待時間、記憶體讀寫效能問題,CPU 不是redis 的瓶頸(記憶體大小與網路I/O 是redis 的瓶頸,也就是客戶端與服務端之間的網路傳輸延遲)。 【相關推薦:Redis影片教學】
- 採用單執行緒模型,單執行緒實作簡單。避免了多執行緒頻繁上下文切換,以及同步機制如鎖帶來的開銷
- 簡單且有效率的基礎資料結構:動態字串(SDS),鍊錶,字典,跳躍鍊錶,整數集合和壓縮列表。然後 redis 在這個基礎上實現使用者能操作的物件:字串,列表,哈希,集合,有序集合等物件
- reactor 模式的網路事件處理器。它使用了 I/O 多路復用去同時監控多個套接字,這是一個高效的I/O模型。 reactor 相關知識可以看下這篇文章框架篇:見識一下linux高效能網路IO Reactor模型
為什麼要用單執行緒
##採用單線程,避免了不必要的上下文切換和競爭條件;不存在多線程導致的切換而消耗CPU- 不用考慮各種鎖的問題,不存在加鎖和釋放鎖的的操作,沒有因為可能出現的死鎖而導致的效能消耗
- 簡單可維護,多執行緒模式會使得程式的編寫更加複雜和麻煩,單執行緒實作易實作
-
redis 是單執行緒系統?
我們常說redis 單線程是指其網絡事件處理模型reactor 是單線程- 如果一次client 請求會刪除幾百萬keys 值,那麼這條命令可能會導致阻塞。在redis 4.0 選擇引入多線程來實現這一類非阻塞的命令
- 在redis6.0 版本正式引入多線程去處理客戶端的I/O 讀寫響應,而redis 命令事件的處理還是在主執行緒單線處理
- 假如是針對整個redis 系統,則一直有其他執行緒去處理非同步任務,如AOF、RDB 的同步
-
redis I/O模型
redis 處理快,不單純因為它是單線程純記憶體系統,還有它採用了Reactor 模型,使用I/O 多路復用來實現對外部請求的處理,減少網路連線、讀寫等待時間。使其在網路I/O 操作中能並發處理大量的客戶端請求,實現高吞吐率,高並發-
redis 的多線程版本I/O模型6.0
更多程式相關知識,請造訪:
程式設計入門! !
以上是Redis學習之聊單線程的reactor模型的詳細內容。更多資訊請關注PHP中文網其他相關文章!