圖解I/O模型

  本文帶你鳥瞰I/O模型全貌,但願可讓你對I/O模型有一個直觀的認識app

什麼是I/O?I/O的過程?同步阻塞 I/O同步非阻塞 I/OI/O多路複用異步I/O異步

什麼是I/O?

  I/O就是計算機內存和外部設備之間拷貝數據的過程。
  那麼I/O模型主要解決的問題是什麼呢?程序經過CPU,請求外部設備上的數據。而數據拷貝到內存裏須要必定的時間,在這個時間裏,程序是主動讓出CPU時間?仍是讓CPU不斷的去查數據是不是到了?
  I/O模型就是用來解決這個決策問題。函數

I/O的過程?

  首先咱們要明白。I/O通信涉及到兩個很是重要的對象。
  1.程序執行時的用戶線程
  2.操做系統內核
  操做系統將進程的地址空間分爲用戶空間內核空間,用戶線程是沒有辦法從內核空間直接獲取數據,須要將數據從內核空間拷貝到用戶空間,再獲取用戶空間的數據。
  因此任何I/O模型,網路數據的讀取均可以分爲2部分。
  1.用戶線程等待內核將網卡中的數據,拷貝到內核空間
  2.內核將數據從內核空間拷貝到用戶空間。
  各個I/O模型的區別就是實現這兩個步驟的方法不一樣spa

同步阻塞 I/O

  用戶線程發起read請求後就阻塞了,讓出CPU,內核會等待網卡數據的到來,而後吧數據拷貝到內核空間,從內核空間拷貝到用戶空間,再喚醒用戶線程。操作系統

同步非阻塞 I/O

  用戶線程不斷髮起read請求,數據沒到內核空間時,每次都返回失敗,直到數據到了內核空間,此時再調用read會阻塞,等待內核將內核空間的數據拷貝到用戶空間,再喚醒用戶線程。線程

I/O多路複用

  這裏把用戶線程的讀取操做分爲了2步,線程先發送select調用,問內核是否將數據準備好了,等數據準備好了,用戶線程再發起read調用,在等待數據從內核空間拷貝到用戶空間這段時間裏,線程還是阻塞的,一次select請求能夠向內核查詢多個數據通道(channel)的狀態,因此才叫多路複用orm

異步I/O

  用戶發起的read調用,會註冊一個回調函數,read當即返回,等到內核將數據準備好後,調用回調函數完成處理,整個過程當中,用戶線程一直沒有被阻塞對象

  最後,期待您的訂閱和點贊,專欄每週都會更新,但願能夠和您一塊兒進步,同時也期待您的批評與指正!blog

相關文章
相關標籤/搜索