redis執行緒模型-學習小結
前言:最近寫的一個專案用到了redis中的list實現一個簡單的佇列去非同步執行計算任務,開發的過程中想起了redis的執行緒模型天然保證了list中的訊息不會被多次/重複消費,但又有點生疏了,藉此複習一下redis的執行緒模型。
redis執行緒模型概覽:
① 由多個socket接收來自客戶端的各種請求,例如:建立通道,返回data,傳送redis指令等。
② socket由I/O多路複用程式進行監聽,redis中的I/O多路複用機制採用的是非阻塞的epoll模型。
③ 將執行命令順序壓入佇列,由檔案事件分派器將分派給相應的處理器處理完畢後返回結果(或資料)。
重點強調:
① redis內部實現的檔案事件處理器為單執行緒的,這也是為什麼redis經常被稱為但單執行緒的原因,但實際上並不是整個redis例項都只有一個執行緒,例如從4.0開始就有的多執行緒在後臺刪除物件,以及從6.0開始的多執行緒網路I/O。具體可看:https://www.cnblogs.com/javastack/p/12848446.html
② 整個redis執行緒模型基於Reactor模型,命令經I/O多路複用程式被存入佇列中後,檔案事件分派器單執行緒處理命令,所以客戶端命令不一定是順序的,但不會有兩條命令被同時執行,也就不會有併發問題(天然解決了開頭說的重複消費的問題,當然要在程式碼里加一些判斷,避免取回空值)
最後:
問:redis為什麼單執行緒也能抗住高併發?
① 基於純記憶體訪問
② 內建時間複雜度低,專門應對高速場景的資料結構
③ 非阻塞I/O:基於epoll模型
④ 單執行緒避免了多執行緒上下文的切換問題:本身使用多執行緒的一大原因就是當一個執行緒I/O時,另一個執行緒可以使用CPU,充分利用資源。但因為redis基於記憶體並沒有I/O,它的執行效率瓶頸並不在I/O上,所以採用多執行緒反而會浪費資源在沒必要的上下文切換中。
相關文章
- 深入學習redis 的執行緒模型Redis執行緒模型
- redis執行緒模型Redis執行緒模型
- Redis的執行緒模型Redis執行緒模型
- (三)Redis 執行緒與IO模型Redis執行緒模型
- Redis之單執行緒 Reactor 模型Redis執行緒React模型
- Redis執行緒模型的前世今生Redis執行緒模型
- Redis基礎知識(學習筆記6--執行緒IO模型)Redis筆記執行緒模型
- Netty 框架學習 —— EventLoop 和執行緒模型Netty框架OOP執行緒模型
- 執行緒學習知識總結執行緒
- Redis篇:單執行緒I/O模型Redis執行緒模型
- redis自學(22)Redis是單執行緒還是多執行緒?Redis執行緒
- Java執行緒安全小結Java執行緒
- 最全java多執行緒學習總結1--執行緒基礎Java執行緒
- Redis執行緒模型的原理分析蒼癘Redis執行緒模型
- 突破Java面試(20)-Redis執行緒模型Java面試Redis執行緒模型
- 關於redis的幾件小事(二)redis執行緒模型Redis執行緒模型
- Java多執行緒學習——執行緒通訊Java執行緒
- Java多執行緒學習(2)執行緒控制Java執行緒
- #大學#Java多執行緒學習02(執行緒同步)Java執行緒
- java 執行緒學習Java執行緒
- 執行緒池學習執行緒
- 執行緒模型執行緒模型
- IO流中「執行緒」模型總結執行緒模型
- Java多執行緒學習(3)執行緒同步與執行緒通訊Java執行緒
- 多執行緒學習一(多執行緒基礎)執行緒
- redis 單執行緒Redis執行緒
- 執行緒池關閉的小結執行緒
- iOS 多執行緒-學習iOS執行緒
- python之多執行緒(學習)Python執行緒
- Java多執行緒學習Java執行緒
- 多執行緒學習(二)執行緒
- 多執行緒學習一執行緒
- Dubbo執行緒模型執行緒模型
- WPF執行緒模型執行緒模型
- Dubbo學習筆記(三) RPC核心原理和執行緒模型筆記RPC執行緒模型
- 理解微信小程式的雙執行緒模型微信小程式執行緒模型
- Java多執行緒學習(1)建立執行緒與執行緒的生命週期Java執行緒
- 多執行緒Demo學習(執行緒的同步,簡單的執行緒通訊)執行緒