首頁  >  文章  >  資料庫  >  redis為什麼用單線程?為什麼那麼快?

redis為什麼用單線程?為什麼那麼快?

青灯夜游
青灯夜游轉載
2021-11-01 10:08:022110瀏覽

什麼是redis的單執行緒? redis為什麼用單線程?為什麼單線程Redis能那麼快?以下這篇文章給大家分析分析,希望對大家有幫助!

redis為什麼用單線程?為什麼那麼快?

1.基本概念

  • #什麼是redis的單一執行緒(核心功能在單一執行緒上,並不是所有功能)

    • redis的網路IO和鍵值對讀寫是由一個執行緒完成的(redis的核心服務)

    • redis的其他功能由額外執行緒完成

      • 持久化
      • 非同步刪除
      • 叢集資料同步
##【相關推薦:

Redis影片教學

#2.redis為什麼用單執行緒

  • 多執行緒的開銷

    • 使用多執行緒可以增加系統吞吐率(每個請求),增加系統擴充性

    • ##無限的增加執行緒數,導致吞吐量下降
    • 被多執行緒同時存取共享資源,例如共享的資料結構
      • 為了保證執行緒安全,導致效能的犧牲
      • 粗粒度的鎖定導致所有串行,系統的吞吐率隨著線程的增加而增加
  • 因此為了節省並發資源的管理,redis使用單線程,保證所有操作串行化

redis為什麼用單線程?為什麼那麼快?

redis為什麼用單線程?為什麼那麼快?

  • ##3.單線程的redis為什麼快

redis大部分操作都在記憶體上高效的資料結構

redis採用多路復用機制,在網路中處理大量客戶端請求,實現高吞吐率
  • 4.socket
    • #socket通訊過程(網路IO處理鍵值對讀寫網路IO處理)
    • SimpleKV 為了處理一個Get 請求
    • 需要監聽客戶端請求(bind/listen)
    • 和客戶端(程式碼)建立連線(accept)
    • 從socket 讀取請求(recv)
    解析客戶端發送請求(parse)
  • 根據請求類型讀取鍵值資料(get)

    最後給客戶端回傳結果,也就是向socket 寫回資料(send)
    • 有潛在的阻塞點
    • accept () 未能成功建立連線時,會一直阻塞\

recv() 從客戶端讀取資料時,會一直阻塞\redis為什麼用單線程?為什麼那麼快?

socket的非阻塞模式

redis為什麼用單線程?為什麼那麼快?保證Redis 線程,既不會像基本IO 模型中一直在阻塞點等待,也不會導致Redis 無法處理實際到達的連線請求或資料

Linux 中的IO 多路復用機制

  • 5 .多路復用
  • Linux中的IO多路復用機制指一個執行緒處理多個IO流,select/poll
    • 在單一執行緒下,同時存在監聽多個套接字和已連接套接字
    • #具體實作
    • FD是多個套接字
    • Redis使用epoll機制,讓核心監聽套接字
      • Redis可以和多個客戶端連接並處理請求,從而提升並發性
      • select/epoll提供了基於事件的回調機制,針對不同的事件呼叫對應的處理函數
    首先將事件放入事件佇列,無需潤徐請求是否實際發生,避免CPU資源浪費
根據對應的事件執行回應的操作

redis為什麼用單線程?為什麼那麼快?

  • ##6.總結

    #redis真的是單線程嗎
  • 對網絡IO 和資料讀寫的操作採用了一個執行緒。

    • 為什麼要用單執行緒
  • 避免多執行緒開發的並發控制問題。
  • 多路復用的 IO 模型密切相關。

單執行緒為什麼這麼快

#######更多程式相關知識,請造訪:###程式設計影片###! ! ###

以上是redis為什麼用單線程?為什麼那麼快?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:juejin.cn。如有侵權,請聯絡admin@php.cn刪除