Redis中的IO多路復用機制

2022-01-17 06:17:25 字數 1307 閱讀 1570

提起redis,我們經常會說其底層是乙個單執行緒模型,但這是不嚴謹的。redis單執行緒指的是網路請求模組使用了乙個執行緒,即乙個執行緒處理所有網路請求,其他模組該使用多執行緒,仍會使用了多個執行緒。既然是單執行緒模型,那麼cpu不是redis的瓶頸。redis的瓶頸最有可能是機器記憶體或者網路頻寬

redis基於reactor模式開發了自己的網路事件處理器,稱之為檔案事件處理器(file event hanlder)。檔案事件處理器由socketio多路復用程式、檔案事件分派器(dispather),事件處理器(handler)四部分組成。關於io多路復用的相關知識,這方面可以參考我之前的一篇文章,這裡就不多解釋了。檔案事件處理器的模型如下所示:

io多路復用程式會同時監聽多個socket,當被監聽的socket準備好執行acceptreadwriteclose等操作時,與這些操作相對應的檔案事件就會產生。io多路復用程式會把所有產生事件的socket壓入乙個佇列中,然後有序地每次僅乙個socket的方式傳送給檔案事件分派器,檔案事件分派器接收到socket之後會根據socket產生的事件型別呼叫對應的事件處理器進行處理。

檔案事件處理器分為幾種:

事件種類:

ae_writable:當服務端有資料需要回傳給客戶端時,服務端將命令回覆處理器與socketae_writable事件關聯起來。

redis的客戶端與服務端的互動過程如下所示:

redis 為什麼這麼快?

redis為什麼是單執行緒?

Redis的I O多路復用

為什麼 redis 中要使用 i o 多路復用這種技術呢?首先,redis 是跑在單執行緒中的,所有的操作都是按照順序線性執行的,但是由於讀寫操作等待使用者輸入或輸出都是阻塞的,所以 i o 操作在一般情況下往往不能直接返回,這會導致某一檔案的 i o 阻塞導致整個程序無法對其它客戶提供服務,而 i...

I O多路復用

一 五種i o模型 1 阻塞i o模型 最流行的i o模型是阻塞i o模型,預設情形下,所有套介面都是阻塞的。我們以資料報套介面為例來講解此模型 我們使用udp而不是tcp作為例子的原因在於就udp而言,資料準備好讀取的概念比較簡單 要麼整個資料報已經收到,要麼還沒有。然而對於tcp來說,諸如套介面...

i o多路復用

最常見的i o多路復用就是 select poll epoll了,下面說說他們的一些特點和區別吧。select 可讀 可寫 異常三種檔案描述符集的申明和初始化。fd set readfds,writefds,exceptionfds fd zero readfds fd zero writefds ...