redis底層是單執行緒

2021-07-25 15:52:52 字數 412 閱讀 8582

一直有個錯覺就是,redis底層命令是併發執行的,但今天檢視若干資料後發現,redis底層是單執行緒的,也就是說多客戶端向redis伺服器傳送操作命令,redis底層是序列執行的,這樣不禁懷疑這樣不是很慢嗎?後經過進一步**,得出結論:

1 單執行緒並不一定比多執行緒慢,多執行緒需要不停切換上下文,本身就有效能損失

2 記憶體型資料庫的瓶頸在io,因為其資料本身就是在記憶體裡面,不需要頻繁的與磁碟做互動,io主要在接收請求和響應結果上,redis採用linux的epoll機制,epoll是linux核心為處理大批量檔案描述符而作了改進的poll,是linux下多路復用io介面select/poll的增強版本,它能顯著提高程式在大量併發連線中只有少量活躍的情況下的系統cpu利用率。

所以redis快在

1 基於記憶體 2 io採用非同步非阻塞epoll機制

Redis單執行緒

redis 的單執行緒主要是指 redis 的網路 io 和鍵值對讀寫是由乙個執行緒來完成的,這也是 redis 對外提供鍵值儲存服務的主要流程。當多個客戶端發起命令,這些命令併發執行時,在redis內部,會排隊逐個執行,也就是執行命令的那個操作是由乙個執行緒執行的。但 redis 的其他功能,比如...

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

沒錯,大家所熟知的 redis 確實是單執行緒模型,指的是執行 redis 命令的核心模組是單執行緒的,而不是整個 redis 例項就乙個執行緒,redis 其他模組還有各自模組的執行緒的。下面這個解釋比較好 一般來說 redis 的瓶頸並不在 cpu,而在記憶體和網路。如果要使用 cpu 多核,可...

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

準確一點來講,既不是單執行緒,也不是多執行緒。io執行緒 記憶體處理執行緒 服務端和客戶端建立 socket 連線,並分配處理執行緒 首先,主線程負責接收建立連線請求。當有客戶端請求和例項建立 socket 連線時,主線程會建立和客戶端的連線,並把 socket 放入全域性等待佇列中。緊接著,主線程...