溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Redis為什么使用單線程模型?

發布時間:2020-05-22 14:04:07 來源:億速云 閱讀:277 作者:鴿子 欄目:編程語言

雙線程的程序可以支持每秒幾百萬的請求量,眾所周知,Redis 作為被廣泛使用的內存數據庫偏偏選擇了單線程模型,這又是為什么呢?其實簡單概括起來主要有以下三個原因,方便維護,可以并發的處理任務以及雙線程不能解決Redis的性能瓶頸。下面我們來仔細分析一下Redis選擇單線程模型的原因。 

Redis為什么使用單線程模型?

 

原因一:單線程模型更方便維護

 

相信我們都了解可維護性對一個項目的重要性,而Redis 使用單線程模型能帶來更好的可維護性,方便開發和調試。如果代碼難以調試和測試,問題也經常難以復現,這對于任何一個項目來說都會嚴重地影響項目的可維護性。多線程模型雖然在某些方面表現優異,但是它卻引入了程序執行順序的不確定性,代碼的執行過程不再是串行的,多個線程同時訪問的變量如果沒有謹慎處理就會帶來詭異的問題。而多線程帶來的問題是很明顯的,如果計算機中的兩個進程(線程同理)同時嘗試修改一個共享內存的內容,在沒有并發控制的情況下,最終的結果依賴于兩個進程的執行順序和時機,如果發生了并發訪問沖突,最后的結果就會是不正確的。

 

原因二:可以并發的處理任務。

 

雖然,Redis選擇了單線程模型,但是這也不影響它能并發的處理客戶端的請求。Redis 服務中運行的絕大多數操作的性能瓶頸都不是 CPU。用單線程模型也并不意味著程序不能并發的處理任務,Redis 雖然使用單線程模型處理用戶的請求,但是它卻使用 I/O 多路復用機制并發處理來自客戶端的多個連接,同時等待多個連接發送的請求。在 I/O 多路復用模型中,最重要的函數調用就是 select 以及類似函數,該方法的能夠同時監控多個文件描述符(也就是客戶端的連接)的可讀可寫情況,當其中的某些文件描述符可讀或者可寫時,select 方法就會返回可讀以及可寫的文件描述符個數。使用 I/O 多路復用技術能夠極大地減少系統的開銷,系統不再需要額外創建和維護進程和線程來監聽來自客戶端的大量連接,減少了服務器的開發成本和維護成本

 

原因三:雙線程不能解決Redis的性能瓶頸

 

這也是Redis選擇單線程模型的最核心的原因。雖然多線程技術的能夠幫助我們充分利用 CPU 的計算資源來并發的執行不同的任務,但是 CPU 資源往往都不是 Redis 服務器的性能瓶頸。哪怕我們在一個普通的 Linux 服務器上啟動 Redis 服務,它也能在 1s 的時間內處理 1,000,000 個用戶請求。

 

如果這種吞吐量不能滿足我們的需求,更推薦的做法是使用分片的方式將不同的請求交給不同的 Redis 服務器來處理,而不是在同一個 Redis 服務中引入大量的多線程操作。所以Redis 并不是 CPU 密集型的服務,如果不開啟 AOF 備份,所有 Redis 的操作都會在內存中完成不會涉及任何的 I/O 操作,這些數據的讀寫由于只發生在內存中,所以處理速度是非??斓?;整個服務的瓶頸在于網絡傳輸帶來的延遲和等待客戶端的數據傳輸,也就是網絡 I/O,所以使用多線程模型處理全部的外部請求可能不是一個好的方案。

 

Redis選擇單線程模型的原因分析就講到這里了,綜上所述,Redis選擇單線程模型的好處更多,使用雙線程其實是完全沒有必要的。當然,以上的分析可能已經打破了大家對于單線程的固有印象,因此不是說雙線程就一定比單線程好,又結合具體的實際情況來分析。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女