在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Redis為何選擇單線程

麥辣雞腿堡 ? 來(lái)源:程序員庫(kù)森 ? 作者:程序員庫(kù)森 ? 2023-10-09 10:59 ? 次閱讀

Redis為何選擇單線程?

在Redisv6.0以前,Redis的核心網(wǎng)絡(luò)模型選擇用單線程來(lái)實(shí)現(xiàn)。

核心意思就是,對(duì)于一個(gè) DB 來(lái)說(shuō),CPU 通常不會(huì)是瓶頸,因?yàn)榇蠖鄶?shù)請(qǐng)求不會(huì)是 CPU 密集型的,而是 I/O 密集型。

具體到 Redis的話,如果不考慮 RDB/AOF 等持久化方案,Redis是完全的純內(nèi)存操作,執(zhí)行速度是非常快的,因此這部分操作通常不會(huì)是性能瓶頸,Redis真正的性能瓶頸在于網(wǎng)絡(luò) I/O,也就是客戶端和服務(wù)端之間的網(wǎng)絡(luò)傳輸延遲,因此 Redis選擇了單線程的 I/O 多路復(fù)用來(lái)實(shí)現(xiàn)它的核心網(wǎng)絡(luò)模型。

實(shí)際上更加具體的選擇單線程的原因如下:

避免過(guò)多的上下文切換開(kāi)銷:如果是單線程則可以規(guī)避進(jìn)程內(nèi)頻繁的線程切換開(kāi)銷,因?yàn)槌绦蚴冀K運(yùn)行在進(jìn)程中單個(gè)線程內(nèi),沒(méi)有多線程切換的場(chǎng)景。

避免同步機(jī)制的開(kāi)銷:如果 Redis選擇多線程模型,又因?yàn)?Redis是一個(gè)數(shù)據(jù)庫(kù),那么勢(shì)必涉及到底層數(shù)據(jù)同步的問(wèn)題,則必然會(huì)引入某些同步機(jī)制,比如鎖,而我們知道 Redis不僅僅提供了簡(jiǎn)單的 key-value 數(shù)據(jù)結(jié)構(gòu),還有 list、set 和 hash 等等其他豐富的數(shù)據(jù)結(jié)構(gòu),而不同的數(shù)據(jù)結(jié)構(gòu)對(duì)同步訪問(wèn)的加鎖粒度又不盡相同,可能會(huì)導(dǎo)致在操作數(shù)據(jù)過(guò)程中帶來(lái)很多加鎖解鎖的開(kāi)銷,增加程序復(fù)雜度的同時(shí)還會(huì)降低性能。

簡(jiǎn)單可維護(hù):如果 Redis使用多線程模式,那么所有的底層數(shù)據(jù)結(jié)構(gòu)都必須實(shí)現(xiàn)成線程安全的,這無(wú)疑又使得 Redis的實(shí)現(xiàn)變得更加復(fù)雜。

總而言之,Redis選擇單線程可以說(shuō)是多方博弈之后的一種權(quán)衡:在保證足夠的性能表現(xiàn)之下,使用單線程保持代碼的簡(jiǎn)單和可維護(hù)性。

Redis真的是單線程?

討論 這個(gè)問(wèn)題前,先看下 Redis的版本中兩個(gè)重要的節(jié)點(diǎn):

Redis 4.0(引入多線程處理異步任務(wù))

Redis 6.0(正式在網(wǎng)絡(luò)模型中實(shí)現(xiàn) I/O 多線程)

所以,網(wǎng)絡(luò)上說(shuō)的Redis是單線程,通常是指在Redis 6.0之前,其核心網(wǎng)絡(luò)模型使用的是單線程;而Redis的異步任務(wù)使用的仍是多線程。

Redis在 4.0 版本的時(shí)候就已經(jīng)引入了的多線程來(lái)做一些異步操作,此舉主要針對(duì)的是那些非常耗時(shí)的命令,通過(guò)將這些命令的執(zhí)行進(jìn)行異步化,避免阻塞單線程的事件循環(huán)。

在 Redis 4.0 之后增加了一些的非阻塞命令如 UNLINK、FLUSHALL ASYNC、FLUSHDB ASYNC。

Redisv6.0為何引入多線程?

很簡(jiǎn)單,就是 Redis的網(wǎng)絡(luò) I/O 瓶頸已經(jīng)越來(lái)越明顯了。

隨著互聯(lián)網(wǎng)的飛速發(fā)展,互聯(lián)網(wǎng)業(yè)務(wù)系統(tǒng)所要處理的線上流量越來(lái)越大,Redis的單線程模式會(huì)導(dǎo)致系統(tǒng)消耗很多 CPU 時(shí)間在網(wǎng)絡(luò) I/O 上從而降低吞吐量,要提升 Redis的性能有兩個(gè)方向:

優(yōu)化網(wǎng)絡(luò) I/O 模塊

提高機(jī)器內(nèi)存讀寫(xiě)的速度

后者依賴于硬件的發(fā)展,暫時(shí)無(wú)解。所以只能從前者下手,網(wǎng)絡(luò) I/O 的優(yōu)化又可以分為兩個(gè)方向:

零拷貝技術(shù)或者 DPDK 技術(shù)

利用多核優(yōu)勢(shì)

零拷貝技術(shù)有其局限性,無(wú)法完全適配 Redis這一類復(fù)雜的網(wǎng)絡(luò) I/O 場(chǎng)景,更多網(wǎng)絡(luò) I/O 對(duì) CPU 時(shí)間的消耗和 Linux 零拷貝技術(shù)。而 DPDK 技術(shù)通過(guò)旁路網(wǎng)卡 I/O 繞過(guò)內(nèi)核協(xié)議棧的方式又太過(guò)于復(fù)雜以及需要內(nèi)核甚至是硬件的支持。

因此,利用多核優(yōu)勢(shì)成為了優(yōu)化網(wǎng)絡(luò) I/O 性價(jià)比最高的方案。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 網(wǎng)絡(luò)
    +關(guān)注

    關(guān)注

    14

    文章

    7703

    瀏覽量

    90093
  • 線程
    +關(guān)注

    關(guān)注

    0

    文章

    507

    瀏覽量

    20012
  • Redis
    +關(guān)注

    關(guān)注

    0

    文章

    381

    瀏覽量

    11227
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    Redis7單線程與多線程詳解

    主要是指Redis的網(wǎng)絡(luò)IO和鍵值對(duì)讀寫(xiě)是由一個(gè)線程來(lái)完成的。
    的頭像 發(fā)表于 01-16 17:33 ?2112次閱讀
    <b class='flag-5'>Redis</b>7<b class='flag-5'>單線程</b>與多<b class='flag-5'>線程</b>詳解

    單線程的雙任務(wù)調(diào)度

    STM32是單線程的,通信協(xié)議層和應(yīng)用功能層的耦合性比較低,如果獨(dú)立運(yùn)行,提高效率不少,主要實(shí)現(xiàn)的方法有哪些呢?
    發(fā)表于 01-10 10:15

    單線程SRAM靜態(tài)內(nèi)存使用

    概述本篇只要介紹這么使用STM32CubeMx工具添加RT-Thread操作系統(tǒng)組件,碼代碼的IDE是keil。介紹單線程SRAM靜態(tài)內(nèi)存使用。如果還不知道,這么使用STM32CubeMx工具添加
    發(fā)表于 08-24 06:57

    一種單線程編程思路簡(jiǎn)析

    事件驅(qū)動(dòng)?邏輯控制?基于回調(diào)的事件驅(qū)動(dòng)或者邏輯控制特點(diǎn)代碼接口實(shí)現(xiàn)用法基于回調(diào)的事件驅(qū)動(dòng)或者邏輯控制本文提供了一種單線程編程思路,并簡(jiǎn)單實(shí)現(xiàn)了該思路。受PLC編程線圈和觸點(diǎn)概念的啟發(fā)。將程序抽象理解
    發(fā)表于 02-16 06:58

    線程好還是單線程好?單線程和多線程的區(qū)別 優(yōu)缺點(diǎn)分析

    摘要:如今單線程與多線程已經(jīng)得到普遍運(yùn)用,那么到底多線程好還是單線程好呢?單線程和多線程的區(qū)別又
    發(fā)表于 12-08 09:33 ?8.2w次閱讀

    從I/O的阻塞與非阻塞、I/O處理的單線程與多線程角度探討服務(wù)器模型

    這里探討的服務(wù)器模型主要指的是服務(wù)器端對(duì)I/O的處理模型。從不同維度可以有不同的分類,這里從I/O的阻塞與非阻塞、I/O處理的單線程與多線程角度探討服務(wù)器模型。
    的頭像 發(fā)表于 01-08 16:13 ?7180次閱讀

    阿里云Redis線程性能提升思路解析

    摘要:?Redis做為高性能的K-V數(shù)據(jù)庫(kù),由于其高性能,豐富的數(shù)據(jù)結(jié)構(gòu)支持,易用等特性,而得到廣泛的應(yīng)用。但是由于redis單進(jìn)程單線程的模型限制,單Redis Server QPS
    發(fā)表于 08-30 16:41 ?316次閱讀

    實(shí)現(xiàn)Java多線程爬蟲(chóng)的兩點(diǎn)

    在我們調(diào)試爬蟲(chóng)程序的時(shí)候,單線程爬蟲(chóng)沒(méi)什么問(wèn)題,但是當(dāng)我們?cè)诰€上環(huán)境使用單線程爬蟲(chóng)程序去采集網(wǎng)頁(yè)時(shí),單線程就暴露出了兩個(gè)致命的問(wèn)題:
    的頭像 發(fā)表于 05-05 21:25 ?2083次閱讀
    實(shí)現(xiàn)Java多<b class='flag-5'>線程</b>爬蟲(chóng)的兩點(diǎn)

    這款16核怪物在單線程和多線程性能方面均躍居主流處理器榜首

    盡管AMD一段時(shí)間以來(lái)一直在主流芯片中注入更多的內(nèi)核,但在單線程性能方面,這家芯片制造商的產(chǎn)品還不能與Intel的產(chǎn)品相提并論。如果這些PassMark號(hào)碼準(zhǔn)確無(wú)誤,那么Zen 3似乎終于可以輕而易舉地獲得AMD的青睞。
    的頭像 發(fā)表于 10-28 15:24 ?2226次閱讀

    Redis常見(jiàn)面試題及答案

    本文的面試題如下: Redis 持久化機(jī)制 緩存雪崩、緩存穿透、緩存預(yù)熱、緩存更新、緩存降級(jí)等問(wèn)題 熱點(diǎn)數(shù)據(jù)和冷數(shù)據(jù)是什么 Memcache與Redis的區(qū)別都有哪些? 單線程redis
    的頭像 發(fā)表于 12-16 11:44 ?2350次閱讀
    <b class='flag-5'>Redis</b>常見(jiàn)面試題及答案

    單線程也能開(kāi)發(fā)異步任務(wù)?ACE JS框架到底是如何做到的

    HarmonyOS 2提供了兩種應(yīng)用開(kāi)發(fā)語(yǔ)言:Java和JS。Java線程特性能夠讓多任務(wù)并行,充分利用硬件資源開(kāi)發(fā)出高性能的應(yīng)用。而JS卻是一個(gè)單線程語(yǔ)言,無(wú)法像Java一樣創(chuàng)建新的Thread
    的頭像 發(fā)表于 08-13 17:16 ?2240次閱讀
    <b class='flag-5'>單線程</b>也能開(kāi)發(fā)異步任務(wù)?ACE JS框架到底是如何做到的

    Redis基礎(chǔ)架構(gòu)設(shè)計(jì)及核心網(wǎng)絡(luò)模型架構(gòu)演進(jìn)

    性能優(yōu)異的服務(wù)離不開(kāi)好的架構(gòu)設(shè)計(jì),Redis使用 I/O multiplexing 實(shí)現(xiàn)了單線程接收海量客戶端請(qǐng)求;通過(guò)單線程Reactor模型實(shí)現(xiàn)了高性能的事件處理
    發(fā)表于 10-11 15:08 ?518次閱讀

    單線程是否會(huì)引起 fail-fast機(jī)制

    ConcurrentModificationException 異常,產(chǎn)生 fail-fast 事件。 多線程?并發(fā)修改?才會(huì)引起 fail-fast 機(jī)制保護(hù)程序?小 B 覺(jué)得這個(gè)答案沒(méi)有說(shuō)全,面試官說(shuō)了單線程
    的頭像 發(fā)表于 10-10 16:31 ?515次閱讀
    <b class='flag-5'>單線程</b>是否會(huì)引起 fail-fast機(jī)制

    Go在單線程計(jì)算性能上的優(yōu)勢(shì)

    一文中,我們討論了Go在單線程計(jì)算性能上的優(yōu)勢(shì)。 現(xiàn)在,考慮這樣的一種場(chǎng)景: 我們需要從某些網(wǎng)址中同步數(shù)據(jù)并進(jìn)行計(jì)算,保存到本地redis緩存中。 現(xiàn)在,我們可以通過(guò)編寫(xiě)Go Worker的方式
    的頭像 發(fā)表于 11-02 11:16 ?629次閱讀
    Go在<b class='flag-5'>單線程</b>計(jì)算性能上的優(yōu)勢(shì)

    redis線程還能保證線程安全嗎

    Redis是一種使用C語(yǔ)言編寫(xiě)的高性能鍵值存儲(chǔ)系統(tǒng),它是單線程的,因?yàn)槭褂昧硕嗦窂?fù)用的方式來(lái)處理并發(fā)請(qǐng)求。這樣的實(shí)現(xiàn)方式帶來(lái)了很好的性能,但同時(shí)也引發(fā)了一些線程安全方面的問(wèn)題。 在Redis
    的頭像 發(fā)表于 12-05 10:28 ?2119次閱讀
    主站蜘蛛池模板: 色婷婷亚洲综合五月 | 精品国产乱码久久久久久浪潮 | 午夜影剧 | 久久e| 黄黄视频免费看 | 久久伊人影视 | 就是操就是干 | eeuss秋霞成人影院 | 亚欧成人乱码一区二区 | 婷婷开心激情网 | 天堂网在线最新版www中文网 | 人人干视频 | 国产69精品久久 | 国产亚洲精品成人a在线 | 日本免费一区视频 | 天天综合天天射 | 亚洲一区在线观看视频 | 午夜免费片在线观看不卡 | vvvv98国产成人综合青青 | 午夜一级福利 | 亚洲a在线播放 | 精品三级视频 | 色网站综合 | 永久国产 | 美女被艹视频网站 | 久久99久久精品免费思思6 | 激情综合色综合啪啪开心 | 国产男人搡女人免费视频 | 色婷婷在线观看视频 | 亚洲香蕉国产高清在线播放 | 欧美adc影院| 日本不卡视频一区二区三区 | 国产一区二区三区在线影院 | 精品国产_亚洲人成在线高清 | 在线a网 | 欧美伊人久久综合网 | 狠狠干欧美 | 天天做天天爽爽快快 | 日韩欧美色图 | 亚洲天堂三级 | 亚洲国产成人精品不卡青青草原 |