馬哥教育網絡第20期—IO類型與IO模型

IO類型與IO模型

IO類型

同步與異步(synchronous,asynchronous):關注消息通知機制

同步:進程發出系統調用之后,不會立即有返回信息,但是一旦有返回信息,則一定是最終結果.
異步:進程發出系統調用之后,會有立即返回結果,但不是最終的結果,當內核處理完成之后,內核通過通知機制通知進程,該系統調用已完成.

阻塞與非阻塞(blocking,nonblocking):關注系統調用完成時,調用者的狀態

阻塞:調用者在返回結果之前,一直處于被掛起狀態,直到有調用結果返回時才能繼續工作.
非阻塞:調用者在調用結果返回之前,并不會被掛起,即系統調用這個動作不會阻塞調用者.

IO模型的分類

  • 阻塞I/O

  • 非阻塞I/O

  • 復用I/O

  • 事件驅動I/O

  • 異步I/O

自己畫的

37.png

畫完之后參考網上的

42.png

阻塞I/O模型

38.png

 當用戶進程發起系統調用之后,在內核還沒有完成該調用任務時,進程會一直被掛起,直到內核將調用完成(內核將數據從磁盤取出到內核內存做處理,處理完之后在將數據轉移至進程內存),這時進程才可以繼續工作.

非阻塞I/O模型

39.png

 當用戶進程發起系統調用之后,該進程不會被掛起,先是處于盲等待狀態,反復向內核確認該調用是否完成,當內核將數據從磁盤取出到內核內存處理完成時,該進程會被掛起,并且內核會將處理的數據轉移至進程內存,這時進程來能繼續工作(該進程在數據從內核內存轉移至進程內存時,是被掛起).

復用I/O模型

40.png

 當用戶進程發起系統調用之后,該進程可以發送多個處理請求交給內核處理,select,poll,epoll都是IO多路復用的機制。I/O多路復用就是通過一種機制,一個進程可以監視多個描述符,一旦某個描述符就緒(一般是讀就緒或者寫就緒),能夠通知程序進行相應的讀寫操作。但select,poll,epoll本質上都是同步I/O,因為他們都需要在讀寫事件就緒后自己負責進行讀寫,也就是說這個讀寫過程是阻塞的,而異步I/O則無需自己負責進行讀寫,異步I/O的實現會負責把數據從內核拷貝到用戶空間.

事件驅動I/O模型

 當用戶進程發起系統調用之后,內核會立即返回一個信號,表示該調用已經收到,接下來該進程可以去處理其他工作,當內核將數據在內核內存中準備好之后,就會通知該進程,進程這個時候就會被掛起,等待內核將數據轉移至進程內存,進程才可以繼續工作.

異步I/O模型

41.png

 當用戶進程發起系統調用之后,內核會立即返回一個信號,表示該調用已經收到,進程可以自由活動,接下來內核處理數據,當內核將數據轉移至進程內存之后,會通知該進程數據已經準備好,此時進程只要去進程內存接著處理就OK.

原創文章,作者:nice_neo_linux,如若轉載,請注明出處:http://www.www58058.com/19860

(1)
nice_neo_linuxnice_neo_linux
上一篇 2016-06-26 22:40
下一篇 2016-06-26 22:41

相關推薦

  • DevOps如何重構IT戰略

    翻譯: 至尊寶 原文: http://www.citeworld.com/article/2897738/development/how-devops-can-redefine-your-it-strategy.html?page=2   DevOps究竟是曇花一現還是你一直在尋找的競爭優勢?我們咨詢了一些專家,對于這種趨勢他們的想法是什…

    Python干貨 2015-03-26
  • Xtrabackup進行MySQL備份

    使用Xtrabackup進行MySQL備份 一、安裝 1、簡介 Xtrabackup是由percona提供的mysql數據庫備份工具,據官方介紹,這也是世界上惟一一款開源的能夠對innodb和xtradb數據庫進行熱備的工具。 特點: (1)備份過程快速、可靠; (2)備份過程不會打斷正在執行的事務; (3)能夠基于壓縮等功能節約磁盤空間和流量; (4)自動…

    Linux干貨 2017-02-20
  • bash功能特性六 bash操作環境

    一、bash查找命令的順序     1、以相對路徑或絕對路徑執行的命令;     2、由alias找到該命令來執行;     3、由bash內置的命令來執行;     4、通過$PATH這個變量的順序找到的第一個命令來執…

    Linux干貨 2015-04-22
  • Linux第七周小結

    1、創建一個10G分區,并格式為ext4文件系統 a) 要求其block大小為2048,預留空間百分比為2,卷標為MYDATA,默認掛載屬性包含acl; b) 掛載至/data/madata目錄,要求掛載時禁止程序自動運行,且不更新文件的訪問時間戳; 2、創建一個大小為1G的swap分區,并創建好文件系統,并啟用之 3、寫一個腳本 a)&…

    2017-08-13
  • Linux 別名與二進制的使用。

    二進制 一般二進制這個名詞聽上去高深莫測,然而當你了解它之后其實并不復雜,在計算機里處理數據一般都是由二進制處理。 平時我們計數都是以10為進制,比如平時數數:1、2、3、4、5、6、7、8、9,數到10時就會導致個位變成0,十位變成了1,因為9+1要向十位進一,十進制意味著數字的每一位最小為0,最大為9。同理,二進制意味著數字的每一位最小為0,最大為1,十…

    Linux干貨 2017-05-20
  • linux的基礎小命令

    1、ifconfig,顯示主機的IP地址 2、echo 用法echo [short-option]… [string]…     -n:不進行換行     string可以使用單引號或雙引號引用變量,單引號變量內容不會替換,雙引號會替換  &nb…

    Linux干貨 2016-10-30
欧美性久久久久