久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

Redis 6.0 多線程重磅發(fā)布,!

 印度阿三17 2020-05-16

Redis 6.0在5.2號這個美好的日子里悄無聲息的發(fā)布了,,這次發(fā)布在IT圈猶如一顆驚雷一般,,因為這是redis最大的一次改版,首次加入了多線程,。

作者Antirez在RC1版本發(fā)布時在他的博客寫下:

the most “enterprise” Redis version to date // 最”企業(yè)級”的

the largest release of Redis ever as far as I can tell // 最大的

the one where the biggest amount of people participated // 參與人數(shù)最多的

這次改變,,性能有個飛速的提升~

先po出新版和舊版性能圖

 

從上面可以看到 GET/SET 命令在 4 線程 IO 時性能相比單線程是幾乎是翻倍了。另外,,這些數(shù)據(jù)只是為了簡單驗證多線程 IO 是否真正帶來性能優(yōu)化,,并沒有針對嚴(yán)謹(jǐn)?shù)难訒r控制和不同并發(fā)的場景進(jìn)行壓測。數(shù)據(jù)僅供驗證參考而不能作為線上指標(biāo),,且只是目前的 unstble分支的性能,,不排除后續(xù)發(fā)布的正式版本的性能會更好。

Redis 6.0 之前的版本真的是單線程嗎,?

Redis基于Reactor模式開發(fā)了網(wǎng)絡(luò)事件處理器,,這個處理器被稱為文件事件處理器,。它的組成結(jié)構(gòu)為4部分:多個套接字、IO多路復(fù)用程序,、文件事件分派器,、事件處理器。因為文件事件分派器隊列的消費是單線程的,,所以Redis才叫單線程模型,。

一般來說 Redis 的瓶頸并不在 CPU,而在內(nèi)存和網(wǎng)絡(luò),。如果要使用 CPU 多核,,可以搭建多個 Redis 實例來解決。

其實,,Redis 4.0 開始就有多線程的概念了,,比如 Redis 通過多線程方式在后臺刪除對象、以及通過 Redis 模塊實現(xiàn)的阻塞命令等,。

Redis 6.0 之前為什么一直不使用多線程,?

使用了單線程后,可維護(hù)性高,。多線程模型雖然在某些方面表現(xiàn)優(yōu)異,,但是它卻引入了程序執(zhí)行順序的不確定性,帶來了并發(fā)讀寫的一系列問題,,增加了系統(tǒng)復(fù)雜度,、同時可能存在線程切換、甚至加鎖解鎖,、死鎖造成的性能損耗,。

Redis 通過 AE 事件模型以及 IO 多路復(fù)用等技術(shù),處理性能非常高,,因此沒有必要使用多線程,。

單線程機制使得 Redis 內(nèi)部實現(xiàn)的復(fù)雜度大大降低,Hash 的惰性 Rehash,、Lpush 等等 “線程不安全” 的命令都可以無鎖進(jìn)行,。

Redis 6.0 為什么要引入多線程呢?

之前的段落說了,,Redis 的瓶頸并不在 CPU,,而在內(nèi)存和網(wǎng)絡(luò)。

內(nèi)存不夠的話,,可以加內(nèi)存或者做數(shù)據(jù)結(jié)構(gòu)優(yōu)化和其他優(yōu)化等,,但網(wǎng)絡(luò)的性能優(yōu)化才是大頭,網(wǎng)絡(luò) IO 的讀寫在 Redis 整個執(zhí)行期間占用了大部分的 CPU 時間,如果把網(wǎng)絡(luò)處理這部分做成多線程處理方式,,那對整個 Redis 的性能會有很大的提升,。

優(yōu)化方向:

  • 提高網(wǎng)絡(luò) IO 性能,典型的實現(xiàn)比如使用 DPDK 來替代內(nèi)核網(wǎng)絡(luò)棧的方式,。

  • 使用多線程充分利用多核,,典型的實現(xiàn)比如 Memcached。

所以總結(jié)起來,,Redis 支持多線程主要就是兩個原因:

  • 可以充分利用服務(wù)器 CPU 資源,,目前主線程只能利用一個核。

  • 多線程任務(wù)可以分?jǐn)?Redis 同步 IO 讀寫負(fù)荷,。

Redis 6.0 默認(rèn)是否開啟了多線程,?

否,在conf文件進(jìn)行配置

io-threads-do-reads yes

io-threads 線程數(shù)

官方建議:4 核的機器建議設(shè)置為 2 或 3 個線程,,8 核的建議設(shè)置為 6 個線程,,線程數(shù)一定要小于機器核數(shù),盡量不超過8個,。

Redis 6.0 多線程的實現(xiàn)機制,?

流程簡述如下

  • 主線程負(fù)責(zé)接收建立連接請求,獲取 Socket 放入全局等待讀處理隊列,。

  • 主線程處理完讀事件之后,,通過 RR(Round Robin)將這些連接分配給這些 IO 線程。

  • 主線程阻塞等待 IO 線程讀取 Socket 完畢,。

  • 主線程通過單線程的方式執(zhí)行請求命令,,請求數(shù)據(jù)讀取并解析完成,但并不執(zhí)行,。

  • 主線程阻塞等待 IO 線程將數(shù)據(jù)回寫 Socket 完畢,。

  • 解除綁定,清空等待隊列,。

該設(shè)計有如下特點:

  • IO 線程要么同時在讀 Socket,,要么同時在寫,不會同時讀或?qū)憽?/p>

  • IO 線程只負(fù)責(zé)讀寫 Socket 解析命令,,不負(fù)責(zé)命令處理,。

開啟多線程后,是否會存在線程并發(fā)安全問題,?

不會,Redis 的多線程部分只是用來處理網(wǎng)絡(luò)數(shù)據(jù)的讀寫和協(xié)議解析,,執(zhí)行命令仍然是單線程順序執(zhí)行,。

Redis 線程中經(jīng)常提到 IO 多路復(fù)用,如何理解,?

這是 IO 模型的一種,,即經(jīng)典的 Reactor 設(shè)計模式,,有時也稱為異步阻塞 IO。

多路指的是多個 Socket 連接,,復(fù)用指的是復(fù)用一個線程,。多路復(fù)用主要有三種技術(shù):Select,Poll,,Epoll,。

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

暫時就到這里了,,部分?jǐn)?shù)據(jù)來源網(wǎng)絡(luò),僅做參考,。

來源:https://www./content-2-695051.html

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點,。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多