Redis 執行緒模型

2021-10-05 07:10:37 字數 1059 閱讀 6556

檔案事件處理器(file event handler)

redis 基於 reactor 模式開發了自己的網路事件處理器: 這個處理器被稱為檔案事件處理器(file event handler)

檔案事件處理器使用 i/o 多路復用(multiplexing)程式來同時監聽多個套接字, 並根據套接字目前執行的任務來為套接字關聯不同的事件處理器。

當被監聽的套接字準備好執行連線應答(accept)、讀取(read)、寫入(write)、關閉(close)等操作時, 與操作相對應的檔案事件就會產生, 這時檔案事件處理器就會呼叫套接字之前關聯好的事件處理器來處理這些事件。

檔案事件處理器以單執行緒方式執行, 但通過使用 i/o 多路復用程式來監聽多個套接字, 檔案事件處理器既實現了高效能的網路通訊模型, 又可以很好地與 redis 伺服器中其他同樣以單執行緒方式執行的模組進行對接, 這保持了 redis 內部單執行緒設計的簡單性。

redis執行緒模型

redis客戶端對服務端的每次呼叫都經歷了傳送命令,執行命令,返回結果三個過程。其中執行命令階段,由於redis是單執行緒來處理命令的,所有每一條到達服務端的命令不會立刻執行,所有的命令都會進入乙個佇列中,然後逐個被執行。並且多個客戶端傳送的命令的執行順序是不確定的。但是可以確定的是不會有兩條命令被同時執行,不會產生併發問題,這就是redis的單執行緒基本模型。

redis是單執行緒模型為什麼效率還這麼高?

純記憶體訪問:資料存放在記憶體中,記憶體的響應時間大約是100納秒,這是redis每秒萬億級別訪問的重要基礎。

非阻塞i/o:redis採用epoll做為i/o多路復用技術的實現,再加上redis自身的事件處理模型將epoll中的連線,讀寫,關閉都轉換為了時間,不在i/o上浪費過多的時間。

單執行緒避免了執行緒切換和競態產生的消耗。

redis採用單執行緒模型,每條命令執行如果占用大量時間,會造成其他執行緒阻塞,對於redis這種高效能服務是致命的,所以redis是面向高速執行的資料庫

io多路復用技術

參考:舉個例子,模擬乙個tcp伺服器處理30個客戶socket。

假設你是乙個老師,讓30個學生解答一道題目,然後檢查學生做的是否正確,你有下面幾個選擇:

Redis執行緒模型

redis基於reactor模式開發了自己的網路事件處理器。被稱為檔案事件處理器,由於這個處理器是單執行緒的所以決定了redis是單執行緒的。多個socket io多路復用程式 scocket佇列 檔案事件分配器 事件處理器 連線應答處理器,命令請求處理器,命令回覆處理器 多個 socket 可能會...

Redis的執行緒模型

redis是單執行緒。採用單執行緒理由是 1 redis 完全是基於記憶體的操作,cpu 不是 redis 的瓶頸,其瓶頸最有可能是機器記憶體的大小或者網路頻寬。2 單執行緒容易實現 好處是採用單執行緒,避免了不必要的上下文切換和競爭條件,不存在多執行緒導致的 cpu 切換,不用去考慮各種鎖的問題,...

Redis 七 執行緒模型

redis內部使用檔案事件處理器file event handler,這個檔案事件處理器是單執行緒的,所以redis才叫做單執行緒的模型。它採用io 多路復用機制同時監聽客戶端的多個連線 多個socket 根據socket上的事件來選擇對應的事件處理器進行處理。檔案事件處理器的結構包含4個部分 多個...