Redis 七 執行緒模型

2021-10-20 06:18:01 字數 1714 閱讀 8344

redis內部使用檔案事件處理器file event handler,這個檔案事件處理器是單執行緒的,所以redis才叫做單執行緒的模型。

它採用io 多路復用機制同時監聽客戶端的多個連線(多個socket),根據socket上的事件來選擇對應的事件處理器進行處理。

檔案事件處理器的結構包含4個部分:

多個socket可能會併發產生不同的操作,每個操作對應不同的檔案事件,但是io多路復用程式會監聽多個socket,會將socket產生的事件放入佇列中排隊,事件分派器每次從佇列中取出乙個事件,把該事件交給對應的事件處理器進行處理。

來看客戶端與redis的一次通訊過程:

1)純記憶體操作;

2)核心是基於非阻塞的io多路復用機制;

3)單執行緒反而避免了多執行緒的頻繁上下文切換問題。

雖然說redis是單執行緒模型,但是, 實際上,redis在 4.0 之後的版本中就已經加入了對多執行緒的支援。

不過,redis 4.0增加的多執行緒主要是針對一些大鍵值對的刪除操作的命令,使用這些命令就會使用主處理之外的其他執行緒來「非同步處理」。

大體上來說,redis 6.0之前主要還是單執行緒處理。

那,redis6.0之前 為什麼不使用多執行緒?

我覺得主要原因有下面3個:

單執行緒程式設計容易並且更容易維護;

redis的效能瓶頸不再cpu,主要在記憶體和網路;

多執行緒就會存在死鎖、執行緒上下文切換等問題,甚至會影響效能。

redis6.0引入多執行緒主要是為了提高網路io讀寫效能,因為這個算是redis中的乙個效能瓶頸(redis的瓶頸主要受限於記憶體和網路)。

雖然,redis6.0引入了多執行緒,但是redis的多執行緒只是在網路資料的讀寫這類耗時操作上使用了, 執行命令仍然是單執行緒順序執行。因此,你也不需要擔心執行緒安全問題。

redis6.0的多執行緒預設是禁用的,只使用主線程。如需開啟需要修改redis配置檔案redis.conf

io-threads-do-reads yescopy to clipboarderrorcopied
開啟多執行緒後,還需要設定執行緒數,否則是不生效的。同樣需要修改redis配置檔案redis.conf:

io-threads 4 #官網建議4核的機器建議設定為2或3個執行緒,8核的建議設定為6個執行緒

七 執行緒操作

include include include include include include include include include include include define buffer 512 struct copy file void copy void arg if bytes...

CUDA 學習(七) 執行緒束

一 概述 執行緒束是gpu的基本執行單元。gpu是一組simd 向量處理器的集合。每一組執行緒或執行緒束中的執行緒同時執行。在理想狀態下,獲取當前指令只需要一次訪存,然後將指令廣播到這個執行緒所占用的所有sp中。當使用gpu進行程式設計時,必須使用向量型別指令,因為gpu採用的是向量體系結構,只有讓...

C 執行緒處理 七 執行緒實列

本筆記摘抄自 記錄一下方便資料查詢。伺服器端頁面 這裡牽涉到httphandle物件問題,這個物件在asp.net中是真正處理資料的物件,後面如果有時間也和大家分享下深入理解asp.net系列,主要是介紹在asp.net中一些核心物件為我們默默做的一些事情,在這裡也不詳細介紹httphandle物件...