首先,要釐清乙個事實,我們通常說,redis 是單執行緒,主要是指redis 的網路 io和鍵值對讀寫是由乙個執行緒來完成的,這也是 redis 對外提供鍵值儲存服務的主要流程。但 redis 的其他功能,比如持久化、非同步刪除、集群資料同步等,其實是由額外的執行緒執行的。
所以,嚴格來說,redis 並不是單執行緒,但是我們一般把 redis 稱為單執行緒高效能,這樣顯得「酷」些。接下來,我也會把 redis 稱為單執行緒模式。而且,這也會促使你緊接著提問:「為什麼用單執行緒?為什麼單執行緒能這麼快?」
要弄明白這個問題,我們就要深入地學習下 redis 的單執行緒設計機制以及多路復用機制。以後當你在對redis 效能進行調優時,也能更有針對性地避免會導致 redis 單執行緒阻塞的操作,例如執行複雜度高的命令。
要更好地理解 redis 為什麼用單執行緒,我們就要先了解多執行緒的開銷。
日常寫程式時,我們經常會聽到一種說法:「使用多執行緒,可以增加系統吞吐率,或是可以增加系統擴充套件性。」的確,對於乙個多執行緒的系統來說,在有合理的資源分配的情況下,可以增加系統中處理請求操作的資源實體,進而提公升系統能夠同時處理的請求數,即吞吐率。下圖是我們採用多執行緒時所期待的結果。
Redis 高效能IO模型
redis核心結束與實戰 03 通常說redis 是單執行緒,主要是指 redis 的網路 io 和鍵值對讀寫是由乙個執行緒來完成的,這也是 redis 對外提供鍵值儲存服務的主要流程。但 redis 的其他功能,比如持久化 非同步刪除 集群資料同步等,其實是由額外的執行緒執行的。目錄 一 多執行緒...
Kafka如何實現高效能IO?
雖然kafka的sdk提供了單條訊息傳送,但實際上,kafka 的客戶端 sdk 在實現訊息傳送邏輯的時候,採用了非同步批量傳送的機制 當你呼叫 send 方法傳送一條訊息之後,無論你是同步傳送還是非同步傳送,kafka 都不會立即就把這條訊息傳送出去。它會先把這條訊息,存放在記憶體中快取起來,然後...
Kafka如何實現高效能IO?
雖然kafka的sdk提供了單條訊息傳送,但實際上,kafka 的客戶端 sdk 在實現訊息傳送邏輯的時候,採用了非同步批量傳送的機制 當你呼叫 send 方法傳送一條訊息之後,無論你是同步傳送還是非同步傳送,kafka 都不會立即就把這條訊息傳送出去。它會先把這條訊息,存放在記憶體中快取起來,然後...