Redis 單線程爲什麼能支撐高併發?

文件事件處理器裏面包裹了一系列的處理程序(包含IO多路複用程序、文件事件分派器、連接應答處理器、命令請求處理器、命令回覆處理器),文件事件處理器是單線程(只有一個線程)的,所以說Redis是單線程。

線程模型:
IO多路複用程序監聽所有的客戶端socket請求,接收到請求之後壓到隊列裏面去,然後分件事件分派器拿到一個請求,根據請求判斷是什麼事件,再分配給對應的事件處理器,當這個請求處理完了之後,再由文件事件分派器從隊列裏面再拿一個請求進行分配處理。

在這裏插入圖片描述

問題:爲什麼單線程的模型效率也這麼高呢?

  1. 純內存操作:事件處理可能在1-2毫秒完成;
  2. IO複用程序是非阻塞,不對請求做處理,只負責監聽,然後放到請求隊列中;
  3. 單線程 避免了 多線程 頻繁上下文切換問題