Redis使用單執行緒的原因

2021-09-25 23:23:39 字數 942 閱讀 7354

單執行緒指的是網路請求模組使用了乙個執行緒(所以不需考慮併發安全性),即乙個執行緒處理所有網路請求,其他模組仍用了多個執行緒。

1絕大部分請求是純粹的記憶體操作(非常快速)

2資料結構簡單,對資料操作也簡單

3採用單執行緒,避免了不必要的上下文切換和競爭條件

4非阻塞io -io多路復用

多路 i/o 復用模型是利用select、poll、epoll可以同時監察多個流的 i/o 事件的能力,在空閒的時候,會把當前執行緒阻塞掉,當有乙個或多個流有i/o事件時,就從阻塞態中喚醒,於是程式就會輪詢一遍所有的流(epoll是只輪詢那些真正發出了事件的流),並且只依次順序的處理就緒的流,這種做法就避免了大量的無用操作。這裡「多路」指的是多個網路連線,「復用」指的是復用同乙個執行緒。採用多路 i/o 復用技術可以讓單個執行緒高效的處理多個連線請求(儘量減少網路io的時間消耗),且redis在記憶體中運算元據的速度非常快(記憶體內的操作不會成為這裡的效能瓶頸),主要以上兩點造就了redis具有很高的吞吐量。

**更清晰,處理邏輯更簡單

不用去考慮各種鎖的問題,不存在加鎖釋放鎖操作,沒有因為可能出現死鎖而導致的效能消耗

不存在多程序或者多執行緒導致的切換而消耗cpu

無法發揮多核cpu效能,不過可以通過在單機開多個redis例項來完善;

其他一些優秀的開源軟體採用的模型:

多程序單執行緒模型:nginx

單程序多執行緒模型:memcached

我們一直在強調的單執行緒,只是在處理我們的網路請求的時候只有乙個執行緒來處理,乙個正式的redis

server執行的時候肯定是不止乙個執行緒的,這裡需要大家明確的注意一下!例如redis進行持久化的時候會以子程序或者子執行緒的方式執行(具體是子執行緒還是子程序待讀者深入研究);

Redis單執行緒

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

redis的單執行緒

1 完全基於記憶體,絕大部分請求是純粹的記憶體操作,非常快速。資料存在記憶體中,類似於hashmap,hashmap的優勢就是查詢和操作的時間複雜度都是o 1 2 資料結構簡單,對資料操作也簡單,redis中的資料結構是專門進行設計的 3 採用單執行緒,避免了不必要的上下文切換和競爭條件,也不存在多...

redis單執行緒的原因和併發快的原因

1 redis是基於記憶體的,記憶體的讀寫速度非常快 2 redis是單執行緒的,省去了很多上下文切換執行緒的時間 3 redis使用多路復用技術,可以處理併發的連線。非阻塞io 內部實現採用epoll,採用了epoll 自己實現的簡單的事件框架。epoll中的讀 寫 關閉 連線都轉化成了事件,然後...