什麼是redis的單執行緒? redis為什麼用單線程?為什麼單線程Redis能那麼快?以下這篇文章給大家分析分析,希望對大家有幫助!
1.基本概念
##【相關推薦:
Redis影片教學】
#2.redis為什麼用單執行緒
- 多執行緒的開銷
- 使用多執行緒可以增加系統吞吐率(每個請求),增加系統擴充性
##無限的增加執行緒數,導致吞吐量下降-
被多執行緒同時存取共享資源,例如共享的資料結構
- 為了保證執行緒安全,導致效能的犧牲
- 粗粒度的鎖定導致所有串行,系統的吞吐率隨著線程的增加而增加
-
因此為了節省並發資源的管理,redis使用單線程,保證所有操作串行化
redis大部分操作都在記憶體上高效的資料結構
redis採用多路復用機制,在網路中處理大量客戶端請求,實現高吞吐率
-
4.socket
-
- #socket通訊過程(網路IO處理鍵值對讀寫網路IO處理)
-
- SimpleKV 為了處理一個Get 請求
- 需要監聽客戶端請求(bind/listen)
- 和客戶端(程式碼)建立連線(accept)
- 從socket 讀取請求(recv)
解析客戶端發送請求(parse)
- 根據請求類型讀取鍵值資料(get)最後給客戶端回傳結果,也就是向socket 寫回資料(send)
有潛在的阻塞點 accept () 未能成功建立連線時,會一直阻塞\
recv() 從客戶端讀取資料時,會一直阻塞\
socket的非阻塞模式
保證Redis 線程,既不會像基本IO 模型中一直在阻塞點等待,也不會導致Redis 無法處理實際到達的連線請求或資料
Linux 中的IO 多路復用機制
-
5 .多路復用
Linux中的IO多路復用機制指一個執行緒處理多個IO流,select/poll-
在單一執行緒下,同時存在監聽多個套接字和已連接套接字 #具體實作 FD是多個套接字 Redis使用epoll機制,讓核心監聽套接字-
Redis可以和多個客戶端連接並處理請求,從而提升並發性-
- select/epoll提供了基於事件的回調機制,針對不同的事件呼叫對應的處理函數
首先將事件放入事件佇列,無需潤徐請求是否實際發生,避免CPU資源浪費
根據對應的事件執行回應的操作
-
##6.總結
#redis真的是單線程嗎
-
對網絡IO 和資料讀寫的操作採用了一個執行緒。
避免多執行緒開發的並發控制問題。 多路復用的 IO 模型密切相關。
單執行緒為什麼這麼快
#######更多程式相關知識,請造訪:###程式設計影片###! ! ###
以上是redis為什麼用單線程?為什麼那麼快?的詳細內容。更多資訊請關注PHP中文網其他相關文章!