您好,登錄后才能下訂單哦!
redis服務中的單線程是什么?可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。
redis是以socket方式通信,socket服務端可同時接受多個客戶端請求連接,也就是說,redis服務同時面對多個redis客戶端連接請求,而redis服務本身是單線程運行。
假設,現在有A,B,C,D,E五個客戶端同時發起redis請求,A優先稍微一點點第一個到達,然后是B,C,D,E依次到達,此時redis服務端開始處理A請求,建立連接需要30秒,獲取請求數據需要10秒,然后處理數據需要0.1秒,回送數據給客戶端需要5秒,總共大概需要45秒。
也就是說,下一個B請求需要等待45秒,這里注意,也許這五個幾乎同時請求,由于socket可以同時處理多個請求,所以建立網絡連接階段時間差可忽略,但是在第二階段,服務端需要什么事都不干,坐等10秒中,對于CPU和客戶端來說是無法忍受的。
所以說單線程效率非常,非常低,但是正是因為這些類似問題,Redis單線程本質上并不是如此運行。接下來討論redis真正的單線程運行方式。
客戶端與服務端建立連接交由socket,可以同時建立多個連接(這里應該是多線程/多進程),建立的連接redis是知道的(為什么知道,去看socket編程,再次強調基礎很重要),然后redis會基于這些建立的連接去探測哪個連接已經接收完了客戶端的請求數據。
注意:不是探測哪個連接建立好了,而是探測哪個接收完了請求數據,而且這里的探測動作就是單線程的開始,一旦探測到則基于接收到的數據開始數據處理階段,然后返回數據,再繼續探測下一個已經接收完請求數據的網絡連接。
注意,從探測到數據處理再到數據返回,全程單線程。
這應該就是所謂的redis單線程。至于內部有多復雜我們無需關心,我們追求的是理解流程,苛求原理,但不能把內臟都挖出來。
從探測到接受完請求數據的網絡連接到最終的數據返回,服務器只需要5.1秒,這個時間是我放大N倍后的數據,實際時間遠遠小于這個,可能是5.1的N萬分之一時間。
為什么這么說,因為數據的處理是在本地內存中,速度有多快任你想象,最終的返回數據雖然牽扯到網絡,但是網絡連接已經建立,這個速度也是非常非常快的,只是比數據處理階段慢那么一點點。因此單線程方式在效率上其實并不需要擔心。
看完上述內容,你們對redis服務中的單線程有進一步的了解嗎?如果還想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。