自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

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

存儲(chǔ) 存儲(chǔ)軟件 Redis
Redis 6.0在5.2號(hào)這個(gè)美好的日子里悄無聲息的發(fā)布了,這次發(fā)布在IT圈猶如一顆驚雷一般,因?yàn)檫@是redis最大的一次改版,首次加入了多線程。

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

[[326840]]

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

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

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

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

這次改變,性能有個(gè)飛速的提升~

先po出新版和舊版性能圖:

 

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

 

 

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

 

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

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

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

 

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

 

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

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

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

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

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

單線程機(jī)制使得 Redis 內(nèi)部實(shí)現(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 整個(gè)執(zhí)行期間占用了大部分的 CPU 時(shí)間,如果把網(wǎng)絡(luò)處理這部分做成多線程處理方式,那對(duì)整個(gè) Redis 的性能會(huì)有很大的提升。

優(yōu)化方向:

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

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

  • 可以充分利用服務(wù)器 CPU 資源,目前主線程只能利用一個(gè)核。
  • 多線程任務(wù)可以分?jǐn)?Redis 同步 IO 讀寫負(fù)荷。

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

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

io-threads-do-reads yes

io-threads 線程數(shù)

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

Redis 6.0 多線程的實(shí)現(xiàn)機(jī)制?

 

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

 

流程簡述如下:

  • 主線程負(fù)責(zé)接收建立連接請(qǐng)求,獲取 Socket 放入全局等待讀處理隊(duì)列。
  • 主線程處理完讀事件之后,通過 RR(Round Robin)將這些連接分配給這些 IO 線程。
  • 主線程阻塞等待 IO 線程讀取 Socket 完畢。
  • 主線程通過單線程的方式執(zhí)行請(qǐng)求命令,請(qǐng)求數(shù)據(jù)讀取并解析完成,但并不執(zhí)行。
  • 主線程阻塞等待 IO 線程將數(shù)據(jù)回寫 Socket 完畢。
  • 解除綁定,清空等待隊(duì)列。

該設(shè)計(jì)有如下特點(diǎn):

  • IO 線程要么同時(shí)在讀 Socket,要么同時(shí)在寫,不會(huì)同時(shí)讀或?qū)憽?/li>
  • IO 線程只負(fù)責(zé)讀寫 Socket 解析命令,不負(fù)責(zé)命令處理。

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

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

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

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

 

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

 

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

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

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

作者:南墻小貓

來源:https://www.cnblogs.com/gz666666/p/12901507.html

 

責(zé)任編輯:武曉燕 來源: 博客園
相關(guān)推薦

2024-03-27 07:44:30

Redis多線程Java

2021-04-26 06:54:15

Redis多線程單線程

2020-09-23 13:37:25

Redis6.0

2024-10-12 09:35:11

Redis版本線程

2015-09-15 17:01:59

2023-08-17 14:12:17

2010-10-20 11:06:27

公司

2021-03-15 09:40:59

Redis單線程效率

2020-05-08 08:01:11

多線程Redis處理

2020-05-14 17:41:40

Redis 6.0多線程數(shù)據(jù)庫

2021-03-31 10:25:03

手機(jī)蘋果內(nèi)存

2019-09-19 10:49:52

微服務(wù)架構(gòu)SOA

2023-12-01 08:18:24

Redis網(wǎng)絡(luò)

2020-11-17 10:20:53

Redis多線程單線程

2015-06-12 10:46:28

Android 開發(fā)谷歌

2024-09-29 15:36:25

2025-01-15 12:58:29

2025-01-17 08:23:33

2023-03-21 08:02:36

Redis6.0IO多線程

2020-09-01 10:46:55

微服務(wù)架構(gòu)服務(wù)器
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)