socket編程:I/O模型

  在TCP服務器編程那篇博客中,我們提到了更加優化連接方式,其實就是關於I/O的傳輸模型:
    

 我們常見的幾種I/O模型:


  1. 阻塞式I/O模型:

    當進程進行數據傳輸連接的時候,只能夠阻塞的等待數據的到來,而無法去幹其他的事情,將服務進程的所有精力全部去應付當前連接;

    圖解:

650) this.width=650;" src="http://s5.51cto.com/wyfs02/M00/80/F4/wKiom1dFXEziu0WRAAAoyMninN4094.png" title="阻塞.png" alt="wKiom1dFXEziu0WRAAAoyMninN4094.png" />


2.非阻塞式I/O模型:

 講數據的等待響應變爲輪詢等待,當輪詢失敗是返回EMOULODBLOCK,然後一段時間後再次進行詢問,成功就進入數據的複製。

圖解;

650) this.width=650;" src="http://s2.51cto.com/wyfs02/M02/80/F4/wKiom1dFXQjAISoVAAAvY6_EkNA567.png" title="非阻塞.png" alt="wKiom1dFXQjAISoVAAAvY6_EkNA567.png" />



3.信號響應I/O:

  進程輪詢進行,然後設置SIGIO的處理程序,當有數據訪問的時候就進行響應,然後進行數據的複製處理,相當於釣魚時候在魚竿上綁了一個鈴鐺,聽到消息才進行處理。

圖解:

650) this.width=650;" src="http://s1.51cto.com/wyfs02/M01/80/F4/wKiom1dFXY7RdBlvAAA7rfSljvw957.png" title="信號.png" alt="wKiom1dFXY7RdBlvAAA7rfSljvw957.png" />



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模型,將數據的等待響應交給別人來進行,自己只需要獲取一個結果:

圖解:


650) this.width=650;" src="http://s1.51cto.com/wyfs02/M02/80/F2/wKioL1dFX-bimg2OAAAruxqIra4336.png" title="異步.png" alt="wKioL1dFX-bimg2OAAAruxqIra4336.png" />



以上就是我們常見的幾種I/O模型。


本文出自 “剩蛋君” 博客,請務必保留此出處http://memory73.blog.51cto.com/10530560/1783073

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