redis是純記憶體資料庫,一般都是簡單的訪問操作,執行緒占用的時間很多,時間的花費主要集中在io上,所以讀取速度快。
redis使用的是非阻塞io,io多路復用,使用了單執行緒來輪詢描述符,將資料庫的開、關、讀、寫都轉換成了事件,減少了執行緒切換時上下文的切換和競爭。多路指的是多個 socket 連線,復用指的是復用乙個執行緒。多路復用技術就是讓單個執行緒高效地處理多個連線請求。
redis採用了單執行緒的模型,保證了每個操作的原子性,也減少了執行緒的上下文切換和競爭。
另外,資料結構也幫了不少忙,redis全程使用hash結構,讀取速度快,還有一些特殊的資料結構,對資料儲存進行了優化,如壓縮表,對短資料進行壓縮儲存,再如,跳表,使用有序的資料結構加快讀取的速度。
還有一點,redis採用自己實現的事件分離器,效率比較高,內部採用非阻塞的執行方式,吞吐能力比較大。
redis單執行緒的原因和併發快的原因
1 redis是基於記憶體的,記憶體的讀寫速度非常快 2 redis是單執行緒的,省去了很多上下文切換執行緒的時間 3 redis使用多路復用技術,可以處理併發的連線。非阻塞io 內部實現採用epoll,採用了epoll 自己實現的簡單的事件框架。epoll中的讀 寫 關閉 連線都轉化成了事件,然後...
spark比MapReduce快的原因
park比mapreduce快的原因 spark是基於記憶體的,而mapreduce是基於磁碟的迭代 mapreduce的設設計 中間結果儲存在檔案中,提高了可靠性,減少了記憶體占用。但是犧牲了效能。spark的設計 資料在記憶體中進行交換,要快一些,但是記憶體這個東西,可靠性不如磁碟。所以效能方面...
快排從右開始的原因
當我們把基準值設定在左邊時,為什麼要從右邊先開始找?乙個陣列為 6 1 2 7 9 3 4 5 10 8 先從右往左 前面幾輪查詢不貼了,到i j時與基準數進行交換,交換之後保證左邊的數都小於基準值右邊的數都大於基準值 從左往右 從有問題開始 i繼續前行當i j時此時值為9,但是條件限制j不能繼續前...