IO模型
Redis是單線程的,爲什麼支持高併發?node.js,nginx也是單線程的。
除了Redis數據是存在內存裏面的,所有操作都是內存級別的,還有其它原因導致它有如此高的性能?
多路複用(事件輪訓)
多路複用是一種IO模型,那系統中還有哪些IO模式?一起來看看吧
常見的IO模型
同步阻塞IO(Blocking IO)
傳統IO模型,請求server,如果server沒有返回,client會一直等待,直到超時
同步非阻塞IO(Non-blocking IO)
請求server,無論是否成功,server都會立刻返回結果
IO多路複用(IO Multiplexing)
即Reactor設計模式,select/epoll的好處就在於單個process就可以同時處理多個網絡連接的IO。它的基本原理就是select/epoll這個function會不斷的輪詢所負責的所有socket,當某個socket有數據到達了,就通知用戶進程。
現在操作系統多路複用API已經不再使用select系統調用,而改用epoll(Linux)和kqueue(FressBSD和MacOS)
異步IO(Asynchronous IO)
即Proactor設計模式,client發起read操作,就可以進行其它操作,server操作成功會通知client