你是如何理解redis單執行緒模型的?
Redis 里面的單執行緒主要是 Redis 的網路 IO 和鍵值對讀寫,它是由一個執行緒來完成的,但是 Redis 的其他功能,比如說持久化、異步洗掉、集群資料同步等等,這些其實是由額外的執行緒執行的,這里的單執行緒主要是Redis 對外提供鍵值存盤服務來說的,
主要流程是這樣的:
- redis 會將每個客戶端都關聯一個指令佇列,客戶端的指令通過佇列來按順序處理,先到先處理,一個客戶端指令佇列中的指令是按順序執行的,
- redis 的每個客戶端都關聯一個回應佇列,通過回應佇列有順序地將指令的回傳結果回傳給客戶端,
- redis同一時間每次都只能處理一個客戶端佇列中的指令或者回應,
Redis 如何處理高并發客戶端連接?
redis利用epoll來實作IO多路復用,將連接資訊和事件放到佇列中,依次放到檔案事件分派器,事件分派器將事件分發給事件處理器,
為什么redis使用單執行緒模型還能保證高性能?
- 第一個是因為redis 是純記憶體操作,記憶體的回應時長是 100 納秒左右,這是 redis 的 QPS 過萬的重要基礎,
- 第二個是因為redis 的核心是基于非阻塞的IO多路復用機制,單執行緒模型避免了執行緒切換和競態產生的消耗,解決了多執行緒的切換性能損耗問題,
- 第三個是因為redis 底層使用C語言實作,一般來說,C 語言實作的程式"距離"作業系統更近,執行速度相對會更快,
什么是阻塞IO?
當我們呼叫
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/272972.html
標籤:其他
上一篇:一文看懂Python面向物件
下一篇:全方位深入高并發系統設計
