Redis是單執行緒還是多執行緒?
Redis到底是單執行緒還是多執行緒?
- 如果僅僅聊Redis的核心的業務處理部分(命令處理),答案是單執行緒
- 如果是聊整個Redis那麼答案是對執行緒
在Redis版本迭代過程中,在兩個重要的時間節點上引入了多執行緒的支援:
- Redis v4.0:引入多執行緒非同步處理一些耗時較長的任務,例如非同步刪除命令unlink
- Redis v6.0:在核心網路模型中引入多執行緒,進一步提高對於多核CPU的利用率
為什麼Redis要選擇單執行緒?
- 拋開持久化不談,Redis是純記憶體操作,執行速度非常快,它的效能瓶頸是網路延遲而不是執行速度,因此多執行緒並不會帶來巨大的效能提升。(相比純記憶體操作,IO多路複用只是削微的提升了速度)
- 多執行緒會導致過的上下文切換,帶來不必要的開銷(單核的情況下,即使是後來加入了多執行緒,也是跟CPU的核數對應的,最多是1到2倍)
- 引入多執行緒會面臨執行緒安全問題,必然要引入執行緒鎖這樣的安全手段,實現複雜度增高,而且效能也會大打折扣