socket io 不使用redis_Redis这么快,线程模型竟然是单线程
Redis的線程模型記住一句話:單進(jìn)程單線程,IO多路復(fù)用。
單線程還這么快?
是的,你沒有看錯(cuò),Redis是單線程處理的。這是因?yàn)镽edis的設(shè)計(jì)者認(rèn)為Redis是基于內(nèi)存的操作,瓶頸在內(nèi)存或者網(wǎng)絡(luò)帶寬而不是CPU。這樣,采用單線程反而減少了多線程間線程的切換,提高了Redis處理事件的效率。
線程模型的組成
Redis的線程模型由如下幾部分組成:
- 多個(gè)socket
- IO多路復(fù)用程序
- scocket隊(duì)列
- 文件事件分配器
- 事件處理器(連接應(yīng)答處理器,命令請求處理器,命令回復(fù)處理器)
其中,多個(gè) socket 會并發(fā)產(chǎn)生不同的操作,每個(gè)操作對應(yīng)不同的文件事件。這時(shí) IO 多路復(fù)用程序會監(jiān)聽多個(gè) socket,并將 socket 產(chǎn)生的事件放入隊(duì)列中排隊(duì),事件分派器每次從隊(duì)列中取出一個(gè)事件,把該事件交給對應(yīng)的事件處理器進(jìn)行處理。
基于Reactor模式的事件處理
Redis基于Reactor模式,開發(fā)了網(wǎng)絡(luò)事件處理器(文件事件處理器)。由于文件事件分派器隊(duì)列的消費(fèi)是單線程的,所以Redis是單線程模型。
- 文件事件處理器使用 I/O 多路復(fù)用程序來同時(shí)監(jiān)聽多個(gè)套接字, 并根據(jù)套接字目前執(zhí)行的任務(wù)來為套接字關(guān)聯(lián)不同的事件處理器。
- 當(dāng)被監(jiān)聽的套接字準(zhǔn)備好執(zhí)行連接應(yīng)答(accept)、讀取(read)、寫入(write)、關(guān)閉(close)等操作時(shí), 與操作相對應(yīng)的文件事件就會產(chǎn)生, 這時(shí)文件事件處理器就會調(diào)用套接字之前關(guān)聯(lián)好的事件處理器來處理這些事件。
雖然文件事件處理器以單線程方式運(yùn)行, 但通過使用 I/O 多路復(fù)用程序來監(jiān)聽多個(gè)套接字, 文件事件處理器既實(shí)現(xiàn)了高性能的網(wǎng)絡(luò)通信模型, 又可以很好地與 redis 服務(wù)器中其他同樣以單線程方式運(yùn)行的模塊進(jìn)行對接。
總結(jié)
Redis的內(nèi)存模型采用單進(jìn)程單線程的方式,并選擇基于Reactor模式的IO多路復(fù)用。
總結(jié)
以上是生活随笔為你收集整理的socket io 不使用redis_Redis这么快,线程模型竟然是单线程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 安卓未来之役下载方法(安卓未来)
- 下一篇: 武汉消防备案(武汉安防备案)