經過多方資料收集、總結、思考,結論如下:
準確地來說,該問題是「為什麼redis採用單程序單執行緒模型」,
我們從兩個層次去理解:
第乙個層次:我們多執行緒的使用情景是io密集型,目的是為了充分利用cpu資源。也就是說當乙個執行緒io等待的時候,另乙個執行緒可以進行執行,達到充分利用cpu資源的效果,不要讓cpu也跟著等待磁碟io或網路io。關於執行緒數量的個數這裡有乙個計算公式:
執行緒數量 / cpu核數 = (執行緒工作時間+執行緒io等待時間)/ 執行緒工作時間
而redis本身是純記憶體操作,可以概念上理解為沒有io操作,那麼對於redis來說應該是:執行緒數量 = cpu核數
第二個層次:也就是官網的解釋,cpu不是redis的效能瓶頸,記憶體大小以及網路io才是。即使是單核cpu對於redis來說,cpu也不會成為redis的效能短板,所以結合以上公式來看,選擇單執行緒就自然而然。而且選擇單執行緒還可以避免執行緒上下文切換;避免多執行緒中的鎖機制產生的等待。
所以結論就很明確了,當然選擇單程序單執行緒作為redis的執行緒模型啦。
面試 為什麼Redis是單執行緒
先給下官網回答 分析 多執行緒使用場景 a充分利用多核cpu b 檔案或者網路io密集型 任務排程 1 redis在linux上 使用管道每秒可以處理百萬請求 如果都是時間複雜度o n 或o log n 命令 單核足以支撐 所以a不滿足 2 redis是針對記憶體操作 所以檔案io不滿足 redis...
Redis為什麼是單執行緒的
因為redis是基於記憶體的操作,cpu不是redis的瓶頸,redis的瓶頸最有可能是機器記憶體的大小或者網路頻寬。既然單執行緒容易實現,而且cpu不會成為瓶頸,那就順理成章地採用單執行緒的方案了。二 詳細原因 1 不需要各種鎖的效能消耗 redis的資料結構並不全是簡單的key value,還有...
為什麼redis是單執行緒的
redis是單執行緒的原因 1 單執行緒不需要各種鎖的效能消耗 2 單執行緒多程序集群方案 3 採用單執行緒避免了不必要的上下文切換和競爭條件,也不存在多程序或者多執行緒導致的切換而消耗cpu。簡單分析 推薦教程 redis教程 redis是基於記憶體的操作,cpu不是redis的瓶頸,redis的...