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

Redis為什么被設(shè)計(jì)為單線程

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

????????redis是單線程的原因在于redis用單個CPU綁定一塊內(nèi)存的數(shù)據(jù),然后針對這塊內(nèi)存的數(shù)據(jù)進(jìn)行多次讀寫的時候,都是在一個CPU上完成的。redis核心就是 如果我的數(shù)據(jù)全都在內(nèi)存里,我單線程的去操作就是效率最高的。所以,redis是單線程。

一、 Redis為什么那么快

1、完全基于內(nèi)存,絕大部分請求是純粹的內(nèi)存操作,非常快速。數(shù)據(jù)存在內(nèi)存中,類似于HashMap,HashMap的優(yōu)勢就是查找和操作的時間復(fù)雜度都是O(1);

2、數(shù)據(jù)結(jié)構(gòu)簡單,對數(shù)據(jù)操作也簡單,Redis中的數(shù)據(jù)結(jié)構(gòu)是專門進(jìn)行設(shè)計(jì)的;

3、采用單線程,避免了不必要的上下文切換和競爭條件,也不存在多進(jìn)程或者多線程導(dǎo)致的切換而消耗 CPU,不用去考慮各種鎖的問題,不存在加鎖釋放鎖操作,沒有因?yàn)榭赡艹霈F(xiàn)死鎖而導(dǎo)致的性能消耗;

4、使用多路I/O復(fù)用模型,非阻塞IO;

5、使用底層模型不同,它們之間底層實(shí)現(xiàn)方式以及與客戶端之間通信的應(yīng)用協(xié)議不一樣,Redis直接自己構(gòu)建了VM 機(jī)制 ,因?yàn)橐话愕南到y(tǒng)調(diào)用系統(tǒng)函數(shù)的話,會浪費(fèi)一定的時間去移動和請求;

以上幾點(diǎn)都比較好理解,下邊針對多路 I/O 復(fù)用模型進(jìn)行簡單的探討:

(1)多路 I/O 復(fù)用模型

多路I/O復(fù)用模型是利用 select、poll、epoll 可以同時監(jiān)察多個流的 I/O 事件的能力,在空閑的時候,會把當(dāng)前線程阻塞掉,當(dāng)有一個或多個流有 I/O 事件時,就從阻塞態(tài)中喚醒,于是程序就會輪詢一遍所有的流(epoll 是只輪詢那些真正發(fā)出了事件的流),并且只依次順序的處理就緒的流,這種做法就避免了大量的無用操作。

這里“多路”指的是多個網(wǎng)絡(luò)連接,“復(fù)用”指的是復(fù)用同一個線程。采用多路 I/O 復(fù)用技術(shù)可以讓單個線程高效的處理多個連接請求(盡量減少網(wǎng)絡(luò) IO 的時間消耗),且 Redis 在內(nèi)存中操作數(shù)據(jù)的速度非???,也就是說內(nèi)存內(nèi)的操作不會成為影響Redis性能的瓶頸,主要由以上幾點(diǎn)造就了 Redis 具有很高的吞吐量。

二、為什么Redis是單線程的

首先要明白,上邊的種種分析,都是為了營造一個Redis很快的氛圍。官方FAQ表示,因?yàn)镽edis是基于內(nèi)存的操作,CPU不是Redis的瓶頸,Redis的瓶頸最有可能是機(jī)器內(nèi)存的大小或者網(wǎng)絡(luò)帶寬。既然單線程容易實(shí)現(xiàn),而且CPU不會成為瓶頸,那就順理成章地采用單線程的方案了。

這里我們一直在強(qiáng)調(diào)的單線程,只是在處理我們的網(wǎng)絡(luò)請求的時候只有一個線程來處理,一個正式的Redis Server運(yùn)行的時候肯定是不止一個線程的,這里需要大家明確的注意一下。例如Redis進(jìn)行持久化的時候會以子進(jìn)程或者子線程的方式執(zhí)行。文章來源地址http://www.zghlxwxcb.cn/news/detail-831843.html

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

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

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

相關(guān)文章

  • 每天五分鐘計(jì)算機(jī)視覺:為什么說1*1的卷積核是全連接神經(jīng)網(wǎng)絡(luò)?

    每天五分鐘計(jì)算機(jī)視覺:為什么說1*1的卷積核是全連接神經(jīng)網(wǎng)絡(luò)?

    上一節(jié)課程中我們對1*1的卷積核進(jìn)行了介紹,他可以降低或者升高輸入的通道數(shù),或者增加復(fù)雜度。除此之外,1*1的卷積核的效果類似于全連接神經(jīng)網(wǎng)絡(luò),但是并不能完全等價(jià),本節(jié)課程我們來詳細(xì)的看一下,1*1的卷積核和全連接神經(jīng)網(wǎng)絡(luò)之間的關(guān)系是什么? 如上圖所示,假

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

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

    目錄 前言 一.線程是什么? 1.1.為什么需要線程 1.2線程的概念 1.3線程和進(jìn)程的區(qū)別 ?二.線程的生命周期 三.認(rèn)識多線程 總結(jié) ??個人主頁:tq02的博客_CSDN博客-C語言,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ù)庫 ,對數(shù)據(jù)的讀寫操作都是在內(nèi)存中完成,因此讀寫速度非??欤S糜?緩存,消息隊(duì)列、分布式鎖等場景 。 ????????Redis 提供了多種數(shù)據(jù)類型來支持不同的業(yè)務(wù)場景,比如 String(字符串)、Hash(哈希)、 List (列表)、Set(集合)、

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

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

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

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

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

    【Redis】redis為什么快

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

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

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

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

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

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

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

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

    2024年02月09日
    瀏覽(16)
  • ArrayList為什么不是線程安全的,如何保證線程安全?

    ArrayList為什么不是線程安全的,如何保證線程安全?

    官方曰, 線程安全就是多線程訪問時,采?了加鎖機(jī)制,當(dāng)?個線程訪問該類的某個數(shù)據(jù)時,進(jìn)?保護(hù),其他線程不能進(jìn)?訪問直到該線程讀取完,其他線程才可使?。不會出現(xiàn)數(shù)據(jù)不?致或者數(shù)據(jù)污染。線程不安全就是不提供數(shù)據(jù)訪問保護(hù),有可能出現(xiàn)多個線程先后更改數(shù)

    2024年02月07日
    瀏覽(45)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包