在TCP服務器編程那篇博客中,我們提到了更加優化連接方式,其實就是關於I/O的傳輸模型:
我們常見的幾種I/O模型:
阻塞式I/O模型:
當進程進行數據傳輸連接的時候,只能夠阻塞的等待數據的到來,而無法去幹其他的事情,將服務進程的所有精力全部去應付當前連接;
圖解:
2.非阻塞式I/O模型:
講數據的等待響應變爲輪詢等待,當輪詢失敗是返回EMOULODBLOCK,然後一段時間後再次進行詢問,成功就進入數據的複製。
圖解;
3.信號響應I/O:
進程輪詢進行,然後設置SIGIO的處理程序,當有數據訪問的時候就進行響應,然後進行數據的複製處理,相當於釣魚時候在魚竿上綁了一個鈴鐺,聽到消息才進行處理。
圖解:
4.複用I/O模型:
利用其他的函數幫助多個監聽,相當與一個進程能夠對多個事件集進行響應傳遞,出現響應以後發生數據傳輸在調用recvfrom(傳遞數據)。相當於一個人掌控多個魚竿,對當前魚竿的所有事件集進行響應操作。
圖解:
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M00/80/F4/wKiom1dFXpPip0gTAAAxMQ8UICU442.png" title="多路複用.png" alt="wKiom1dFXpPip0gTAAAxMQ8UICU442.png" />
以上都是同步I/O模型,都是有自己,所屬進程進行的數據響應。
下面是異步I/O模型,將數據的等待響應交給別人來進行,自己只需要獲取一個結果:
圖解:
以上就是我們常見的幾種I/O模型。
本文出自 “剩蛋君” 博客,請務必保留此出處http://memory73.blog.51cto.com/10530560/1783073