redis爲何是單線程以及redis爲何這麼快?

Redis爲何這麼快網絡

一、徹底基於內存,絕大部分請求是純粹的內存操做,很是快速。數據存在內存中,相似於HashMap,HashMap的優點就是查找和操做的時間複雜度都是O(1);數據結構

二、數據結構簡單,對數據操做也簡單,Redis中的數據結構是專門進行設計的;多線程

三、採用單線程,避免了沒必要要的上下文切換和競爭條件,也不存在多進程或者多線程致使的切換而消耗 CPU,不用去考慮各類鎖的問題,不存在加鎖釋放鎖操做,沒有由於可能出現死鎖而致使的性能消耗;函數

四、使用多路I/O複用模型,非阻塞IO;性能

五、使用底層模型不一樣,它們之間底層實現方式以及與客戶端之間通訊的應用協議不同,Redis直接本身構建了VM 機制 ,由於通常的系統調用系統函數的話,會浪費必定的時間去移動和請求;spa

以上幾點都比較好理解,下邊咱們針對多路 I/O 複用模型進行簡單的探討:線程

(1)多路 I/O 複用模型設計

多路I/O複用模型是利用 select、poll、epoll 能夠同時監察多個流的 I/O 事件的能力,在空閒的時候,會把當前線程阻塞掉,當有一個或多個流有 I/O 事件時,就從阻塞態中喚醒,因而程序就會輪詢一遍全部的流(epoll 是隻輪詢那些真正發出了事件的流),而且只依次順序的處理就緒的流,這種作法就避免了大量的無用操做。進程

這裏「多路」指的是多個網絡鏈接,「複用」指的是複用同一個線程。採用多路 I/O 複用技術可讓單個線程高效的處理多個鏈接請求(儘可能減小網絡 IO 的時間消耗),且 Redis 在內存中操做數據的速度很是快,也就是說內存內的操做不會成爲影響Redis性能的瓶頸,主要由以上幾點造就了 Redis 具備很高的吞吐量。事件

那麼爲何Redis是單線程的

咱們首先要明白,上邊的種種分析,都是爲了營造一個Redis很快的氛圍!官方FAQ表示,由於Redis是基於內存的操做,CPU不是Redis的瓶頸,Redis的瓶頸最有多是機器內存的大小或者網絡帶寬。既然單線程容易實現,並且CPU不會成爲瓶頸,那就瓜熟蒂落地採用單線程的方案了(畢竟採用多線程會有不少麻煩!)。

相關文章
相關標籤/搜索