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