Redis 單線程爲什麼能支撐高併發?
時間 2021-06-09
標籤
Redis
redis
文件事件處理器裏面包裹了一系列的處理程序(包含IO多路複用程序、文件事件分派器、連接應答處理器、命令請求處理器、命令回覆處理器),文件事件處理器是單線程(只有一個線程)的,所以說Redis是單線程。
線程模型:
IO多路複用程序監聽所有的客戶端socket請求,接收到請求之後壓到隊列裏面去,然後分件事件分派器拿到一個請求,根據請求判斷是什麼事件,再分配給對應的事件處理器,當這個請求處理完了之後,再由文件事件分派器從隊列裏面再拿一個請求進行分配處理。
問題:爲什麼單線程的模型效率也這麼高呢?
- 純內存操作:事件處理可能在1-2毫秒完成;
- IO複用程序是非阻塞,不對請求做處理,只負責監聽,然後放到請求隊列中;
- 單線程 避免了 多線程 頻繁上下文切換問題。