redis單執行緒為什麼執行速度這麼快的原因。

2021-10-24 08:36:47 字數 890 閱讀 9530

(一)純記憶體操作,避免大量訪問資料庫,減少直接讀取磁碟資料,redis將資料儲存在記憶體裡面,讀寫資料的時候都不會受到硬碟 i/o 速度的限制,所以速度快;

(二)單執行緒操作,避免了不必要的上下文切換和競爭條件,也不存在多程序或者多執行緒導致的切換而消耗cpu,不用去考慮各種鎖的問題,不存在加鎖釋放鎖操作,沒有因為可能出現死鎖而導致的效能消耗;

(三)多樣的資料結構

(四)採用了非同步非阻塞i/o多路復用機制

i/o操作的阻塞:當使用者執行緒發出io請求之後,核心會去檢視資料是否就緒,如果沒有就緒就會等待資料就緒,而使用者執行緒就會處於阻塞狀態,使用者執行緒交出cpu。當資料就緒之後,核心會將資料拷貝到使用者執行緒,並返回結果給使用者執行緒,使用者執行緒才解除block狀態。

redis如何解決的呢:

使用者首先將需要進行io操作的socket新增到select中,然後阻塞等待select系統呼叫返回。當資料到達時,socket被啟用,select函式返回。使用者執行緒正式發起read請求,讀取資料並繼續執行。這樣使用者可以註冊多個socket,然後不斷地呼叫select讀取被啟用的socket,redis服務端將這些socke置於佇列中,然後,檔案事件分派器,依次去佇列中取,**到不同的事件處理器中,提高讀取效率。採用多路 i/o 復用技術可以讓單個執行緒高效的處理多個連線請求(儘量減少網路 io 的時間消耗),多路i/o復用模型是利用 select、poll、epoll 可以同時監察多個流的 i/o 事件的能力,在空閒的時候,會把當前執行緒阻塞掉,當有乙個或多個流有 i/o 事件時,就從阻塞態中喚醒,於是程式就會輪詢一遍所有的流(epoll 是只輪詢那些真正發出了事件的流),並且只依次順序的處理就緒的流,這種做法就避免了大量的無用操作,從而提高效率。

redis單執行緒為什麼速度快

1 基本概念 一塊2.gghz的cpu,一秒可以處理2.6 10 9 條命令,一條指令就是0.38ns,切換一次執行緒耗時2000ns,切換執行緒開銷是大的。2 那為什麼有多執行緒 硬碟訪問時間遠遠大於記憶體。當cpu在等待硬碟的時候,它可以先去做別的事情,比如等硬碟要乙個小時,儲存現場需要十五分鐘...

Redis為什麼是單執行緒

經過多方資料收集 總結 思考,結論如下 準確地來說,該問題是 為什麼redis採用單程序單執行緒模型 我們從兩個層次去理解 第乙個層次 我們多執行緒的使用情景是io密集型,目的是為了充分利用cpu資源。也就是說當乙個執行緒io等待的時候,另乙個執行緒可以進行執行,達到充分利用cpu資源的效果,不要讓...

redis是單執行緒的為什麼速度這麼快?

redis是基於記憶體的也可以持久化的日誌型 key value資料庫,是單執行緒的。由於redis是基於記憶體進行讀寫的,所以他的io瓶頸並不在磁碟上 記憶體的速度非常快。redis是key value型資料庫,相比於關係型資料庫效率更高,時間複雜度為o 1 redis的使用場景為連線非常多但每個...