網絡IO模型,及各個web服務使用的類型

網絡IO模型

更加詳細的解釋:https://blog.csdn.net/u013205877/article/details/94228455

同步/異步:關注的是事件處理的消息通信機制,即在等待⼀件事情的處理結果時,被調⽤者是否提供完成通知。

阻塞/⾮阻塞:關注調⽤者在等待結果返回之前所處的狀態 阻塞:locking,指IO操作需要徹底完成後才返回到⽤⼾空間,調⽤結果返回之前,調⽤者被掛起,⼲不了別的事情。 ⾮阻塞:nonblocking,指IO操作被調⽤後⽴即返回給⽤⼾⼀個狀態值,⽆需等到IO操作徹底完成,最終的調⽤結果返回之前,調⽤者不會被掛起,可以去做別的事
情。

一、同步阻塞型

  程序向內核發送IO請求後⼀直等待內核響應,如果內核處理請求的IO操作不能⽴即返回,則進程將⼀直等待並不再接受新的請求,並由進程輪訓查看IO是否完成,完成後進程將IO結果返回給Client,在IO沒有返回期間進程不能接受其他客⼾的請求,⽽且是有進程⾃⼰去查看IO是否完成,這種⽅式簡單,但是⽐較慢,⽤的⽐較少。

二、同步非阻塞型

  程序向內核發送請IO求後⼀直等待內核響應,如果內核處理請求的IO操作不能⽴即返回IO結果,進程將不再等待,⽽且繼續處理其他請求,但是仍然需要進程隔⼀段時間就要查看內核IO是否完成。

三、IO多路複用型

  IO multiplexing就是我們說的select,poll,epoll,有些地⽅也稱這種IO⽅式爲event driven IO。select/poll/epoll的好處就在於單個process就可以同時處理多個⽹絡連接的IO。它的基本原理就是select,poll,epoll這個function會不斷的輪詢所負責的所有socket,當某個socket有數據到達了,就通知⽤⼾進程。 當⽤⼾進程調⽤了select,那麼整個進程會被block,⽽同時,kernel會“監視”所有select負責的socket,當任何⼀個socket中的數據準備好了,select就會返回。這個時候⽤⼾進程再調⽤read操作,將數據從kernel拷⻉到⽤⼾進程。
Apache 的三種工作模式,兩種是屬於這種工作模式
prefork是此模式的主進程+多進程/單線程+select
work是此模式的主進程+多進程/多線程+poll模式

四、信號驅動型

  程序進程向內核發送IO調⽤後,不⽤等待內核響應,可以繼續接受其他請求,內核收到進程請求後進⾏的IO如果不能⽴即返回,就由內核等待結果,直到IO完成後內核再通知進程。

apache event模型就是主進程+多進程/多線程+信號驅動

五、異步非阻塞

  程序進程向內核發送IO調⽤後,不⽤等待內核響應,可以繼續接受其他請求,內核調⽤的IO如果不能⽴即
返回,內核會繼續處理其他事物,直到IO完成後將結果通知給內核,內核在將IO完成的結果返回給進程,期間進程可以
接受新的請求,內核也可以處理新的事物,因此相互不影響,可以實現較⼤的同時並實現較⾼的IO復⽤,因此異步⾮阻
塞使⽤最多的⼀種通信⽅式。

nginx是異步⾮阻塞。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章