提起redis
,我們經常會說其底層是乙個單執行緒模型,但這是不嚴謹的。redis
單執行緒指的是網路請求模組使用了乙個執行緒,即乙個執行緒處理所有網路請求,其他模組該使用多執行緒,仍會使用了多個執行緒。既然是單執行緒模型,那麼cpu
不是redis
的瓶頸。redis
的瓶頸最有可能是機器記憶體或者網路頻寬。
redis
基於reactor
模式開發了自己的網路事件處理器,稱之為檔案事件處理器(file event hanlder
)。檔案事件處理器由socket
、io
多路復用程式、檔案事件分派器(dispather
),事件處理器(handler
)四部分組成。關於io
多路復用的相關知識,這方面可以參考我之前的一篇文章,這裡就不多解釋了。檔案事件處理器的模型如下所示:
io
多路復用程式會同時監聽多個socket
,當被監聽的socket
準備好執行accept
、read
、write
、close
等操作時,與這些操作相對應的檔案事件就會產生。io
多路復用程式會把所有產生事件的socket
壓入乙個佇列中,然後有序地每次僅乙個socket
的方式傳送給檔案事件分派器,檔案事件分派器接收到socket
之後會根據socket
產生的事件型別呼叫對應的事件處理器進行處理。
檔案事件處理器分為幾種:
事件種類:
ae_writable
:當服務端有資料需要回傳給客戶端時,服務端將命令回覆處理器與socket
的ae_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 ...