Redis是單線程的,爲何支持高併發?node.js,nginx也是單線程的。
除了Redis數據是存在內存裏面的,全部操做都是內存級別的,還有其它緣由致使它有如此高的性能?html
多路複用(事件輪訓)
多路複用是一種IO模型,那系統中還有哪些IO模式?一塊兒來看看吧node
傳統IO模型,請求server,若是server沒有返回,client會一直等待,直到超時nginx
請求server,不管是否成功,server都會馬上返回結果設計模式
即Reactor設計模式,select/epoll的好處就在於單個process就能夠同時處理多個網絡鏈接的IO。它的基本原理就是select/epoll這個function會不斷的輪詢所負責的全部socket,當某個socket有數據到達了,就通知用戶進程。
如今操做系統多路複用API已經再也不使用select系統調用,而改用epoll(Linux)和kqueue(FressBSD和MacOS)網絡
即Proactor設計模式,client發起read操做,就能夠進行其它操做,server操做成功會通知client併發