redis自學(22)Redis是單執行緒還是多執行緒?

蓝海的bug本發表於2024-03-20

Redis是單執行緒還是多執行緒?

Redis到底是單執行緒還是多執行緒?

  • 如果僅僅聊Redis的核心的業務處理部分(命令處理),答案是單執行緒
  • 如果是聊整個Redis那麼答案是對執行緒

Redis版本迭代過程中,在兩個重要的時間節點上引入了多執行緒的支援:

  • Redis v4.0:引入多執行緒非同步處理一些耗時較長的任務,例如非同步刪除命令unlink
  • Redis v6.0:在核心網路模型中引入多執行緒,進一步提高對於多核CPU的利用率

為什麼Redis要選擇單執行緒?

  • 拋開持久化不談,Redis是純記憶體操作,執行速度非常快,它的效能瓶頸是網路延遲而不是執行速度,因此多執行緒並不會帶來巨大的效能提升。(相比純記憶體操作,IO多路複用只是削微的提升了速度)
  • 多執行緒會導致過的上下文切換,帶來不必要的開銷(單核的情況下,即使是後來加入了多執行緒,也是跟CPU的核數對應的,最多是12倍)
  • 引入多執行緒會面臨執行緒安全問題,必然要引入執行緒鎖這樣的安全手段,實現複雜度增高,而且效能也會大打折扣

相關文章