Redis之單執行緒 Reactor 模型
導讀 | 純記憶體訪問,所有資料都在記憶體中,所有的運算都是記憶體級別的運算,記憶體響應時間的時間為納秒級別。因此 redis 程式的 cpu 基本不存在磁碟 I/O 等待時間、記憶體讀寫效能問題,CPU 不是 redis 的瓶頸(記憶體大小和網路I/O 才是 redis 的瓶頸,也就是客戶端和服務端之間的網路傳輸延遲)。 |
redis 的高效能
- 純記憶體訪問,所有資料都在記憶體中,所有的運算都是記憶體級別的運算,記憶體響應時間的時間為納秒級別。因此 redis 程式的 cpu 基本不存在磁碟 I/O 等待時間、記憶體讀寫效能問題,CPU 不是 redis 的瓶頸(記憶體大小和網路I/O 才是 redis 的瓶頸,也就是客戶端和服務端之間的網路傳輸延遲)
- 採用單執行緒模型,單執行緒實現簡單。避免了多執行緒頻繁上下文切換,以及同步機制加鎖帶來的開銷
- 簡單高效的基礎資料結構:動態字串(SDS),連結串列,字典,跳躍連結串列,整數集合和壓縮列表。然後 redis 在這個基礎上去實現使用者能操作的物件:字串,列表,雜湊,集合,有序集合等物件
- reactor 模式的網路事件處理器。它使用了 I/O 多路複用去同時監控多個套接字,這是一種高效的I/O模型。reactor 相關知識可以看下這篇文章 框架篇:見識一下 高效能網路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
原文來自:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69955379/viewspace-2852447/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Netty原始碼分析之Reactor執行緒模型詳解Netty原始碼React執行緒模型
- Redis篇:單執行緒I/O模型Redis執行緒模型
- redis執行緒模型Redis執行緒模型
- Redis的執行緒模型Redis執行緒模型
- redis 單執行緒Redis執行緒
- 多執行緒Reactor模式執行緒React模式
- Reactor執行緒模型及其在Netty中的應用React執行緒模型Netty
- Redis-單執行緒Redis執行緒
- Redis--單執行緒Redis執行緒
- (三)Redis 執行緒與IO模型Redis執行緒模型
- Redis執行緒模型的前世今生Redis執行緒模型
- 《redis》4-redis是單執行緒?Redis執行緒
- redis自學(22)Redis是單執行緒還是多執行緒?Redis執行緒
- 深入Netty邏輯架構,從Reactor執行緒模型開始Netty架構React執行緒模型
- 深入學習redis 的執行緒模型Redis執行緒模型
- redis執行緒模型-學習小結Redis執行緒模型
- 多執行緒之共享模型執行緒模型
- redis為什麼用單執行緒不用多執行緒Redis執行緒
- 《【面試突擊】— Redis篇》-- Redis的執行緒模型瞭解嗎?為啥單執行緒效率還這麼高?面試Redis執行緒模型
- 突破Java面試(20)-Redis執行緒模型Java面試Redis執行緒模型
- Redis執行緒模型的原理分析蒼癘Redis執行緒模型
- 關於redis單執行緒的分析Redis執行緒
- 面試官:Netty的執行緒模型可不只是主從多Reactor這麼簡單面試Netty執行緒模型React
- 關於redis的幾件小事(二)redis執行緒模型Redis執行緒模型
- 執行緒模型執行緒模型
- 【Redis破障之路】三:Redis單執行緒架構Redis執行緒架構
- Netty原始碼解析一——執行緒池模型之執行緒池NioEventLoopGroupNetty原始碼執行緒模型OOP
- netty原始碼分析之揭開reactor執行緒的面紗(三)Netty原始碼React執行緒
- netty原始碼分析之揭開reactor執行緒的面紗(二)Netty原始碼React執行緒
- netty原始碼分析之揭開reactor執行緒的面紗(一)Netty原始碼React執行緒
- Node.js 的單執行緒事件驅動模型和內建的執行緒池模型Node.js執行緒事件模型
- WPF執行緒模型執行緒模型
- Dubbo執行緒模型執行緒模型
- 伺服器模型——從單執行緒阻塞到多執行緒非阻塞(下)伺服器模型執行緒
- 伺服器模型——從單執行緒阻塞到多執行緒非阻塞(中)伺服器模型執行緒
- Java 多執行緒共享模型之管程(上)Java執行緒模型
- Java多執行緒之記憶體模型Java執行緒記憶體模型
- Redis單執行緒,為什麼速度快Redis執行緒