socket io 不使用redis_Redis这么快,线程模型竟然是单线程
生活随笔
收集整理的這篇文章主要介紹了
socket io 不使用redis_Redis这么快,线程模型竟然是单线程
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Redis的線程模型記住一句話:單進程單線程,IO多路復用。
單線程還這么快?
是的,你沒有看錯,Redis是單線程處理的。這是因為Redis的設計者認為Redis是基于內存的操作,瓶頸在內存或者網絡帶寬而不是CPU。這樣,采用單線程反而減少了多線程間線程的切換,提高了Redis處理事件的效率。
線程模型的組成
Redis的線程模型由如下幾部分組成:
- 多個socket
- IO多路復用程序
- scocket隊列
- 文件事件分配器
- 事件處理器(連接應答處理器,命令請求處理器,命令回復處理器)
其中,多個 socket 會并發產生不同的操作,每個操作對應不同的文件事件。這時 IO 多路復用程序會監聽多個 socket,并將 socket 產生的事件放入隊列中排隊,事件分派器每次從隊列中取出一個事件,把該事件交給對應的事件處理器進行處理。
基于Reactor模式的事件處理
Redis基于Reactor模式,開發了網絡事件處理器(文件事件處理器)。由于文件事件分派器隊列的消費是單線程的,所以Redis是單線程模型。
- 文件事件處理器使用 I/O 多路復用程序來同時監聽多個套接字, 并根據套接字目前執行的任務來為套接字關聯不同的事件處理器。
- 當被監聽的套接字準備好執行連接應答(accept)、讀取(read)、寫入(write)、關閉(close)等操作時, 與操作相對應的文件事件就會產生, 這時文件事件處理器就會調用套接字之前關聯好的事件處理器來處理這些事件。
雖然文件事件處理器以單線程方式運行, 但通過使用 I/O 多路復用程序來監聽多個套接字, 文件事件處理器既實現了高性能的網絡通信模型, 又可以很好地與 redis 服務器中其他同樣以單線程方式運行的模塊進行對接。
總結
Redis的內存模型采用單進程單線程的方式,并選擇基于Reactor模式的IO多路復用。
總結
以上是生活随笔為你收集整理的socket io 不使用redis_Redis这么快,线程模型竟然是单线程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 安卓未来之役下载方法(安卓未来)
- 下一篇: sqlserver拼接sql插入tabl