redis為什么設(shè)計成單線程

問:假設(shè)此刻有任務(wù)A和任務(wù)B,有以下兩種執(zhí)行方式,請問哪種方式執(zhí)行更快呢?

  • 方式一:一個線程,先執(zhí)行A,執(zhí)行完后再執(zhí)行B
  • 方式二:兩個線程,一個線程執(zhí)行A,另一個線程執(zhí)行B

答:方式一更快。CPU在切換線程的時候,有一個上下文切換的事件,這個上下文切換是非常耗時的,假設(shè)一個CPU主頻是2.6GHz,這意味著每秒可以執(zhí)行2.6 * 10^9 個指令, 那么每個指令的時間大概是0.38ns!而一次上下文切換,就將近需要耗時2000ns!在這個時間內(nèi),CPU什么都干不了,只是做了保存上下文的動作。

問: 為什么一般是在I/O操作的時候要用多線程呢?

答: 因?yàn)镮/O操作一般可以分為兩個階段,即等待I/O準(zhǔn)備就緒和真正操作I/O資源!以磁盤為例,磁盤上的數(shù)據(jù)是分磁道,分簇存儲的,但是數(shù)據(jù)往往不是連續(xù)排列在同一磁道上的,所以磁頭在讀取數(shù)據(jù)時往往需要在磁道之間反復(fù)移動,這里就有一個尋道耗時,盤面旋轉(zhuǎn)將請求數(shù)據(jù)所在扇區(qū)移至讀寫頭下方也是需要時間的,同時這里還包含一個旋轉(zhuǎn)耗時,所以在這一段時間內(nèi),線程是阻塞著等待磁盤的,此時操作系統(tǒng)可以將那個空閑的CPU核心用于服務(wù)其他線程。因此I/O操作的情況下,使用多線程,效率會更高。
因?yàn)閞edis不涉及I/O操作,所以設(shè)計為單線程的效率是最高的!

問: redis的性能和CPU無關(guān),那redis的性能瓶頸在哪呢?

答:redis的性能瓶頸在于:
1. 網(wǎng)絡(luò)帶寬
2. 機(jī)器內(nèi)存大小
redis客戶端執(zhí)行一條命令分為四個過程,發(fā)送命令,命令排隊(duì),命令執(zhí)行,返回結(jié)果。其中發(fā)送命令+返回結(jié)果這一過程被稱為Round Trip Time(RTT,往返時間)redis的客戶端和服務(wù)器,可能部署在不同的機(jī)器上,例如客戶端在北京,服務(wù)端在上海,兩地直線距離約為1300公里,那么1次RTT時間=1300×2/300000×2/3)= 13毫秒(光在真空中傳輸速度為每秒30萬公里,這里假設(shè)光纖為光速的2/3),那么客戶端在1秒內(nèi)大約只能執(zhí)行80次左右的命令。

參考:https://blog.csdn.net/u010122604/article/details/92829855

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一. 操作系統(tǒng)概念 操作系統(tǒng)位于底層硬件與應(yīng)用軟件之間的一層.工作方式: 向下管理硬件,向上提供接口.操作系統(tǒng)進(jìn)行...
    月亮是我踢彎得閱讀 6,162評論 3 28
  • 近乎所有與Java相關(guān)的面試都會問到緩存的問題,基礎(chǔ)一點(diǎn)的會問到什么是“二八定律”、什么是“熱數(shù)據(jù)和冷數(shù)據(jù)” ,復(fù)...
    Java資訊庫閱讀 1,146評論 0 3
  • 覺得自己如煙花般在人海綻放,不會凋落,不會變老;生活是一場盛宴,不會變涼不會有吃光的一天。為什么擁有時不知道珍惜,...
    無邪i閱讀 195評論 0 0
  • 挽起黃河浪,相伴長城長。西出陽關(guān)古人在,圓夢到敦煌。古道新驛站,絲路迎朝陽。駝鈴換作風(fēng)笛唱,大漠飛鳳凰。
    蘇意峰閱讀 610評論 0 3
  • 聽個故事:《兩個和尚挑水吃》。 從前有兩座山,一座山上住著“一休”和尚,另一座山上住著“二休”和尚。 山上沒有水。...
    美麗之琴閱讀 771評論 0 1

友情鏈接更多精彩內(nèi)容