網路IO模型,及各個web服務使用的型別

2021-10-01 21:14:11 字數 1384 閱讀 1861

更加詳細的解釋:

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

阻塞/⾮阻塞:關注調⽤者在等待結果返回之前所處的狀態 阻塞: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是非同步⾮阻塞。

I O模型之Web應用服務

三 復用型io呼叫 四 linux中五種i o模型 五 http中的i o模型 六 nginx中的i o模型 當前最為流行的web伺服器就屬httpd和nginx。web 伺服器到底幹了什麼事?簡單點說就是接受使用者請求,響應使用者請求。這個過程的實現就是完成了跨主機之間的通訊,而主機間的通訊我們使...

非同步IO網路伺服器設計 一 IO模型

說到非同步io網路伺服器,全國人民都知道 windows下用iocp,linux下用epoll 無數的高手寫過文章來講iocp和epoll相關的文章。本人分別使用epoll和iocp開發過網路庫,也使用過boost.asio,試歸納如下 epoll 1.通過epoll ctl向非同步io註冊註冊 亦...

網路IO模型及同步 非同步與阻塞 非阻塞的理解

常見io分為下面兩個流程 1 等待資料準備好 2 從核心向程序複製資料 對於乙個套接字的輸入操作,第一步通常涉及等待資料從網路中到達,當所有等待分組到達時,他被複製到核心的某個緩衝區 第二步就是資料從核心緩衝區複製到應用程式緩衝區 阻塞io模型 標紅部分是阻塞,直到阻塞結束recvfrom才能返回 ...