認識IO模型

來源:互聯網
上載者:User

常見的IO函數主要有read()/write(),recv()/send(),recvmsg()/sendmsg(),readv()/writev()。談到IO模型,首先瞭解一下網路資料是如何被處理及接收的,當我們使用某一IO函數時候,會向linux核心發送命令請求,核心空間建立相應檔案描述符,網路資料由網路線路傳播至本地主機,經網路層解析過後得到資料,核心將資料緩衝在所建立檔案描述符指向的緩衝區中(在核心空間中)。最後將該緩衝區的內容複寫到應用程式緩衝區(在使用者空間中),完成網路資料處理。

IO的方式有阻塞IO、非阻塞IO、IO複用、訊號驅動、非同步IO等

阻塞IO

阻塞IO是最通用的IO類型,使用這種模型進行資料接收的時候,在資料沒有到之前程式會一直等待。

非阻塞IO

當把通訊端設定成非阻塞的IO,則對每次請求,核心都不會阻塞,會立即返回;當沒有資料到的時候,會返回一個錯誤(EMOULDBLOCK),直到有資料到來。相當於有個迴圈,一直在測試檔案描述符是否可讀,這顯然是一種極度浪費cpu資源的IO操作模式。

IO複用

在等待資料的時候加入逾時的時間,當逾時時間沒有用到達的時候與阻塞情況一致,而當逾時時間到達仍然沒有資料接收到,系統會返回,不再等待。一般使用select()或者poll()函數按照一定的逾時時間輪詢,直到需要等待的通訊端有資料到來。

訊號驅動IO

在進程開始的時候註冊一個訊號處理的回呼函數,進程繼續執行,當訊號發生時,即有了IO的時間,這裡即有資料到來。

非同步IO模型

與訊號驅動IO類似,區別在於訊號驅動IO當資料到來的時候,使用訊號通知註冊的訊號處理函數,而非同步IO則在資料複製完成的時候才發送訊號通知註冊的訊號處理函數。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.