国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Redis為什么是單線程的

這篇具有很好參考價(jià)值的文章主要介紹了Redis為什么是單線程的。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

為什么需要多線程

首先,現(xiàn)在的CPU一般都是由多個(gè)核心組成,每個(gè)核心可以認(rèn)為是一個(gè)獨(dú)立的處理器,它們能夠并行地處理任務(wù)。所以,如果我們的CPU是多核的,但是程序是單線程的,那么執(zhí)行程序時(shí),這個(gè)線程在某一個(gè)時(shí)刻只能在一個(gè)核心上運(yùn)行,而其它的核心卻是空閑的(如果沒(méi)有其他程序的話)。所以,為了提高CPU的使用率,我們可以創(chuàng)建多個(gè)線程,每個(gè)線程處理任務(wù)的一部分(每個(gè)部分互不依賴),而每個(gè)核心執(zhí)行一個(gè)線程,此時(shí)CPU的使用率將提高,程序的運(yùn)行速度自然也就加快了。

除此之外,假設(shè)我們的程序有A、B、C三個(gè)任務(wù)需要執(zhí)行,但是由于我們的程序使用的是單線程,這些任務(wù)只能輪流執(zhí)行,A執(zhí)行完畢只后,才能執(zhí)行B,B執(zhí)行完畢只后,才能執(zhí)行C。這也就意味著,在單線程的環(huán)境下,一個(gè)新的任務(wù),需要等待它之前的任務(wù)執(zhí)行完畢之后,才能被執(zhí)行。假設(shè)A任務(wù)是一個(gè)非常耗時(shí)的任務(wù),那么后面的B、C需要等待較長(zhǎng)的一段時(shí)間,才能被執(zhí)行,這樣的話提交B、C任務(wù)的用戶,需要等待較長(zhǎng)的時(shí)間,才能得到響應(yīng)。如果使用的是多線程,那么每個(gè)線程被分配到不同的核心上,可以并行地執(zhí)行;若核心數(shù)量不夠,CPU將采用時(shí)間片輪轉(zhuǎn)算法,輪流為每一個(gè)線程分配時(shí)間片執(zhí)行,這樣后續(xù)到達(dá)的任務(wù),也可以并發(fā)地執(zhí)行,而不需要等待之前任務(wù)的完成。此時(shí),后續(xù)到達(dá)的任務(wù),也可以較早地得到響應(yīng),任務(wù)的響應(yīng)速度變得更加均勻。

如何理解redis的單線程

這里需要注意一個(gè)問(wèn)題,我們所說(shuō)的Redis的單線程,不是指Redis程序真的只會(huì)有一個(gè)線程。這里所說(shuō)的單線程,指的是Redis處理客戶端發(fā)來(lái)的數(shù)據(jù)操作請(qǐng)求(增刪改查),只會(huì)使用一個(gè)線程去執(zhí)行。但是實(shí)際上,Redis在執(zhí)行其他操作的時(shí)候,可能會(huì)開(kāi)啟多個(gè)進(jìn)程或線程,比如說(shuō)持久化。Redis執(zhí)行BGSAVE指令,進(jìn)行快照持久化時(shí),就會(huì)fork出一個(gè)子進(jìn)程,然后子進(jìn)程去創(chuàng)建快照,完成持久化操作。

redis為什么使用單線程

官方解釋如下:因?yàn)镽edis是基于內(nèi)存的操作,CPU不是Redis的瓶頸,Redis的瓶頸最有可能是機(jī)器內(nèi)存的大小或者網(wǎng)絡(luò)帶寬。既然單線程容易實(shí)現(xiàn),而且CPU不會(huì)成為瓶頸,那就順理成章地采用單線程的方案了。

上面的解釋不是很好理解,我就簡(jiǎn)單說(shuō)一說(shuō)我自己的理解吧。我們知道,Redis將數(shù)據(jù)存放在內(nèi)存當(dāng)中,這也就意味著,Redis在操作數(shù)據(jù)時(shí),不需要進(jìn)行磁盤I/O。磁盤I/O是一個(gè)比較耗時(shí)的操作,所以對(duì)于需要進(jìn)行磁盤I/O的程序,我們可以使用多線程,在某個(gè)線程進(jìn)行I/O時(shí),CPU切換到當(dāng)前程序的其他線程執(zhí)行,以此減少CPU的等待時(shí)間。而Redis直接操作內(nèi)存中的數(shù)據(jù),所以使用多線程并不能有效提升效率,相反,使用多線程反倒會(huì)因?yàn)樾枰M(jìn)行線程的切換而降低效率。

除此之外,使用多線程的話,多個(gè)線程間進(jìn)行同步,保證線程的安全,也是需要開(kāi)銷的。尤其是Redis的數(shù)據(jù)結(jié)構(gòu)都是一些實(shí)現(xiàn)較為簡(jiǎn)單的集合結(jié)構(gòu),若使用多線程,將會(huì)頻繁地發(fā)生線程沖突,線程的競(jìng)爭(zhēng)頻率較高,反倒會(huì)拖慢Redis的響應(yīng)速度。

綜上所述,Redis為了保持簡(jiǎn)單和高效,自然而然地就使用了單線程。

redis如何提高CPU的使用率

前面也提過(guò),現(xiàn)在的CPU一般都有多個(gè)核心,每個(gè)核心可以單獨(dú)執(zhí)行。Redis處理客戶端請(qǐng)求使用單線程,那么自然而然,無(wú)法將CPU的所有核心都占用,也就造成了資源的浪費(fèi)。而解決的方式也比較簡(jiǎn)單,我們可以在同一個(gè)服務(wù)器上開(kāi)啟多個(gè)Redis程序,每個(gè)Redis程序使用不同的端口,相互獨(dú)立,以此提高CPU的使用率。而這多個(gè)Redis程序可以配置成主從節(jié)點(diǎn),共同為一個(gè)程序服務(wù),也可以相互獨(dú)立,服務(wù)于多個(gè)程序。

總結(jié)

以上就對(duì)Redis為何使用單線程,做了一個(gè)大致的介紹,總的來(lái)說(shuō),Redis使用單線程的原因就是:**多線程并不能有效提升Redis的性能,相反可能還會(huì)降低性能,所以自然而然使用單線程。**希望這篇博客對(duì)有需要的人有所幫助 ,若存在錯(cuò)誤或者不足,歡迎指正和補(bǔ)充。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-514937.html

到了這里,關(guān)于Redis為什么是單線程的的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Redis——關(guān)于它為什么快?使用場(chǎng)景?以及使用方式?為何引入多線程?

    Redis——關(guān)于它為什么快?使用場(chǎng)景?以及使用方式?為何引入多線程?

    目錄 1.既然redis那么快,為什么不用它做主數(shù)據(jù)庫(kù),只用它做緩存? 2.Redis 一般在什么場(chǎng)合下使用? ?3.redis為什么這么快? 4.Redis為什么要引入了多線程? redis設(shè)計(jì)者的初衷,就只是為了存儲(chǔ) 小量級(jí)的共享數(shù)據(jù) 。 所以,他敢直接單線程直接干上去,因?yàn)閿?shù)據(jù)量小,所以夠快

    2024年01月25日
    瀏覽(22)
  • 【Redis】-使用Lua腳本解決多線程下的超賣問(wèn)題以及為什么?

    【Redis】-使用Lua腳本解決多線程下的超賣問(wèn)題以及為什么?

    一.多線程下引起的超賣問(wèn)題呈現(xiàn) 1.1.我先初始化庫(kù)存數(shù)量為1、訂單數(shù)量為0 1.2.然后我開(kāi)啟3個(gè)線程去執(zhí)行業(yè)務(wù) 業(yè)務(wù)為:判斷如果說(shuō)庫(kù)存數(shù)量大于0,則庫(kù)存減1,訂單數(shù)量加1 結(jié)果為:庫(kù)存為-2,訂單數(shù)量為3 原因:如下圖所示,這是因?yàn)榉謩e有6個(gè)指令(3個(gè)庫(kù)存減1指令,3個(gè)訂單

    2024年02月03日
    瀏覽(24)
  • 什么是線程?為什么需要線程?和進(jìn)程的區(qū)別?

    什么是線程?為什么需要線程?和進(jìn)程的區(qū)別?

    目錄 前言 一.線程是什么? 1.1.為什么需要線程 1.2線程的概念 1.3線程和進(jìn)程的區(qū)別 ?二.線程的生命周期 三.認(rèn)識(shí)多線程 總結(jié) ??個(gè)人主頁(yè):tq02的博客_CSDN博客-C語(yǔ)言,Java,Java數(shù)據(jù)結(jié)構(gòu)領(lǐng)域博主 ?? 本文由 tq02 原創(chuàng),首發(fā)于 CSDN?? ???本章講解內(nèi)容: 線程的講解 ??學(xué)習(xí)專欄:

    2024年02月14日
    瀏覽(20)
  • Redis—Redis介紹(是什么/為什么快/為什么做MySQL緩存等)

    Redis—Redis介紹(是什么/為什么快/為什么做MySQL緩存等)

    一、Redis是什么 Redis 是一種 基于內(nèi)存的數(shù)據(jù)庫(kù) ,對(duì)數(shù)據(jù)的讀寫操作都是在內(nèi)存中完成,因此讀寫速度非???,常用于 緩存,消息隊(duì)列、分布式鎖等場(chǎng)景 。 ????????Redis 提供了多種數(shù)據(jù)類型來(lái)支持不同的業(yè)務(wù)場(chǎng)景,比如 String(字符串)、Hash(哈希)、 List (列表)、Set(集合)、

    2024年02月10日
    瀏覽(28)
  • 為什么要使用線程池

    線程池主要是 控制運(yùn)行的線程的數(shù)量 ,處理過(guò)程中將任務(wù)放入隊(duì)列,然后在線程創(chuàng)建后啟動(dòng)這些任務(wù),如果線程數(shù)量超過(guò)了最大數(shù)量,超出數(shù)量的線程排隊(duì)等候,等其他線程執(zhí)行完畢,再?gòu)年?duì)列中取出任務(wù)來(lái)執(zhí)行。 Java線程的 創(chuàng)建 非常昂貴,需要 JVM 和 OS (操作系統(tǒng))配合

    2023年04月09日
    瀏覽(28)
  • 為什么使用線程池?解釋下線程池參數(shù)?

    (1)降低資源消耗:提高線程利用率,降低創(chuàng)建和銷毀線程的消耗。 (2)提高響應(yīng)速度:任務(wù)來(lái)了,直接有線程可用可執(zhí)行,而不是線創(chuàng)建線程再執(zhí)行。 (3)提高線程的可管理性;線程是稀缺資源,使用線程池可以統(tǒng)一分配調(diào)優(yōu)監(jiān)控。 (1)corePoolSize:代表核心線程數(shù),也

    2024年02月16日
    瀏覽(31)
  • 【Redis】redis為什么快

    【Redis】redis為什么快

    ??? ? ?? 個(gè)人博客: 個(gè)人主頁(yè) ?? 個(gè)人專欄: Redis ? ???? 功不唐捐,玉汝于成 ? 目錄 前言 正文 結(jié)語(yǔ) ?我的其他博客 在當(dāng)今的計(jì)算機(jī)應(yīng)用領(lǐng)域,數(shù)據(jù)存儲(chǔ)和高性能訪問(wèn)成為系統(tǒng)設(shè)計(jì)中至關(guān)重要的一環(huán)。Redis以其卓越的性能、簡(jiǎn)潔而強(qiáng)大的設(shè)計(jì)原則,成為眾多開(kāi)發(fā)者和

    2024年01月25日
    瀏覽(33)
  • 為什么要用線程池?

    線程池是一種管理和復(fù)用線程資源的機(jī)制,它由一個(gè)線程池管理器和一組工作線程組成。線程池管理器負(fù)責(zé)創(chuàng)建和銷毀線程池,以及管理線程池中的工作線程。工作線程則負(fù)責(zé)執(zhí)行具體的任務(wù)。 線程池的主要作用是管理和復(fù)用線程資源,避免了線程的頻繁創(chuàng)建和銷毀所帶來(lái)的

    2024年02月06日
    瀏覽(22)
  • 為什么arrayList線程不安全?

    ????????ArrayList是Java中的一種動(dòng)態(tài)數(shù)組,它在內(nèi)部使用數(shù)組來(lái)存儲(chǔ)元素。ArrayList的線程不安全性主要體現(xiàn)在多線程并發(fā)訪問(wèn)和修改同一個(gè)ArrayList實(shí)例時(shí)可能出現(xiàn)的問(wèn)題。 ????????當(dāng)多個(gè)線程同時(shí)對(duì)ArrayList進(jìn)行修改操作時(shí),可能會(huì)導(dǎo)致數(shù)據(jù)不一致或者出現(xiàn)異常。這是因?yàn)?/p>

    2024年02月12日
    瀏覽(22)
  • 【Redis】為什么要學(xué) Redis

    【Redis】為什么要學(xué) Redis

    關(guān)于為什么要學(xué) Redis 這個(gè)問(wèn)題,一個(gè)字就可以回答,那就是:快! Redis是一個(gè)將數(shù)據(jù)儲(chǔ)存到內(nèi)存中的非關(guān)系型數(shù)據(jù)庫(kù),它是以鍵值對(duì)的形式來(lái)組織數(shù)據(jù)的,一般可以用作內(nèi)存數(shù)據(jù)庫(kù)、緩存、消息隊(duì)列等。 使用 Redis 的主要原因就是因?yàn)樗目?,但是它的快是相?duì)于 MySQL 等這樣

    2024年02月09日
    瀏覽(16)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包