Redis是單線程的,為上下文切換線程節(jié)省了大量時(shí)間。
為什么redis是單線程的?
一、官網(wǎng)解釋
由于Redis是基于內(nèi)存的操作,因此CPU并不是Redis的瓶頸。 Redis的瓶頸很可能是機(jī)器內(nèi)存或網(wǎng)絡(luò)帶寬的大小。 既然單線程易于實(shí)現(xiàn)并且CPU不會(huì)成為瓶頸,那采用單線程解決方案是合乎邏輯的了。
二、性能指標(biāo)
普通筆記本可以輕松地每秒處理數(shù)十萬(wàn)個(gè)請(qǐng)求。
三、詳細(xì)原因
1、不需要各種鎖的性能消耗
Redis的數(shù)據(jù)結(jié)構(gòu)并非全都是簡(jiǎn)單的鍵值(Key-Value),而是有復(fù)雜的結(jié)構(gòu),如列表(list)和哈希(hash)。 這些結(jié)構(gòu)可以執(zhí)行細(xì)粒度的操作,例如在長(zhǎng)列表后面添加元素并將其添加到哈希(hash)或刪除對(duì)象。
這些操作可能需要非常大量的鎖,從而導(dǎo)致同步開(kāi)銷顯著增加。 簡(jiǎn)而言之,在單線程的情況下,不需要考慮各種鎖,沒(méi)有鎖釋放操作,也沒(méi)有由于可能的死鎖而導(dǎo)致的性能消耗。
2、單線程多進(jìn)程集群方案
單線程的功能實(shí)際上非常強(qiáng)大,每個(gè)內(nèi)核的效率也很高。 與單線程相比,多線程自然可以具有更高的性能限制。 但是,在當(dāng)今的計(jì)算環(huán)境中,甚至單機(jī)多線程限制通常也無(wú)法滿足。需要進(jìn)一步探索的是多服務(wù)器群集群方案,并且這些方案中的多線程技術(shù)仍然是不可用的。
所以單線程、多進(jìn)程的集群不失為一個(gè)不錯(cuò)的解決方案。
以上就是redis為什么是單線程的的詳細(xì)內(nèi)容,更多請(qǐng)關(guān)注創(chuàng)新互聯(lián)其它相關(guān)文章!