httpd服務歸納:淺談I/O模型

1. 四種理論的I/O模型 

    1) 調用者(服務進程):

        阻塞:  進程發起I/O調用,如果調用為完成,進程被掛起休眠,不能再執行其他功能

        非阻塞:進程發起I/O調用,被調用的函數完成之前,依然可以執行其他功能

    2) 被調用函數或過程(系統調用I/O讀寫操作)

        同步: 函數或功能被進程調用時,不立即返回值,直到此調用完成 

        異步: 函數或功能被進程調用時,不能立即完成則返回未完成狀態,完成后通知調用進程

    3)四中理論模型

         同步阻塞 

         同步非阻塞(幾乎沒人使用)

         異步阻塞 

         異步非阻塞: 真正的異步I/O 

    

2. 五種網絡服務中的I/O模型  

    1) 同步阻塞模型

        工作進程調用I/O請求庫函數后,工作進程被阻塞等待I/O完成第一階段,數據從硬盤加載到內核空間,此時工作進程在庫函數返回數據之前繼續被阻塞參與完成第二階段數據從內核空間復制到用戶進程空間的過程,最后拿到數據。 

同步阻塞.png

    2)I/O復用(同步阻塞模型):select(), poll()

         工作進程調用一個管理I/O的特殊庫函數,此庫函數可以接受并管理多個I/O請求,工作進程則可以同時等待多個I/O請求,雖然是阻塞,但是阻塞在多個進程上,可以提高效率。第二階段依然需要工作進程參與庫函數把內核空間數據復制到用戶空間,第二階段依舊阻塞。 

IO復用模型.png

    3) 同步非阻塞(盲等待模型)

            工作進程調用I/O庫函數,工作進程不需要I/O完成依舊可以處理其他事物,但是需要反復查看I/O是否完成。第二階段依然需要工作進程參與庫函數把內核空間數據復制到用戶空間,第二階段依舊阻塞。 

        

同步非阻塞.png

    4) 事件觸發模型(同步非阻塞): epoll(), kqueue() 

        工作進程調用I/O庫函數,工作進程不需要等待I/O完成,內核空間I/O完成后會通過事件通知進程。第二階段依然需要工作進程參與庫函數把內核空間數據復制到用戶空間,第二階段依舊阻塞。  

事件驅動(同步非阻塞).png

    5) 全異步:AlO 調用

        全異步1: 工作進程調用I/O庫函數,工作進程不需要等待I/O完成,內核空間I/O完成后會通過事件通知進程。第二階段不需要工作進程參與庫函數把內核空間數據復制到用戶空間,庫函數完成復制后自行返回數據給工作進程

異步非阻塞.png

        全異步2: 工作進程調用I/O庫函數,工作進程不需要等待I/O完成,內核空間I/O完成后會通過事件通知進程。第二階段不需要庫函數從內核空間復制數據,而是通過內存映射來實現(mmap)。 

mmap.png

        實現以上功能,libevent   庫 

         libevent.png

原創文章,作者:以馬內利,如若轉載,請注明出處:http://www.www58058.com/4811

(0)
以馬內利以馬內利
上一篇 2015-05-27 10:05
下一篇 2015-05-28 09:41

相關推薦

  • awk用法三

      6、結構化控制語句     6.1 if語句       格式:if(條件) {body} else {else body}         實例1:判斷/etc/passwd文件中的UID如果大于500則顯示為“common user”,否則顯…

    Linux干貨 2016-02-14
  • Haproxy+keepalivd+LAMP

    目錄 一、試驗部署 1、實驗要求 2、實驗準備 3、拓撲結構 4、網絡規劃 二、基礎設置 1、LAMP配置 2、HAProxy配置 3、Keepalived配置 三、測試 四、總結 一、試驗部署 1、實驗要求 (1) 動靜分離部署wordpress,動靜都要能實現負載均衡,要注意會話的問題; (2) 給出設計拓撲,寫成博客; (3)haproxy的設定要求:…

    2017-05-18
  • 集中管理利器-puppet快速入門-上

    帶著問題來學習 ?  從如下內容來看,如何自定義安裝用戶想要的東西呢?                                        …

    Linux干貨 2015-04-22
  • linux 軟件包管理

    1、Linux軟件包管理 Redhat, SUSE: RPM Redhat Package Manager PRM is Package Manager 前端工具:yum, apt-get 后端工具:RPM, dpt   2、rpm: 數據庫:/var/lib/rpm  rpm包: 軟件包作者下載源程序,編譯配置完成后,制作成rpm包 格…

    Linux干貨 2017-08-06
  • mariadb之再次演練

    架構圖如下: 1.按照架構圖所示,準備機器,做好時間同步,主機名解析 192.168.42.150 node1 [proxySQL keepalived]192.168.42.151 node2 [proxySQL keepalived]192.168.42.152 node3 [mysql-master wha]192.168.42.153 node4 […

    Linux干貨 2016-03-06
  • Linux Shell(腳本)編程入門

    為什么要進行shell編程 在Linux系統中,雖然有各種各樣的圖形化接口工具,但是sell仍然是一個非常靈活的工具。Shell不僅僅是命令的收集,而且是一門非常棒的編程語言。您可以通過使用shell使大量的任務自動化,shell特別擅長系統管理任務,尤其適合那些易用性、可維護性和便攜性比效率更重要的任務。 下面,讓我們一起來看看shell是如何工作的: 建…

    Linux干貨 2017-08-05

評論列表(2條)

  • 以馬內利
    以馬內利 2015-05-27 11:15

    各位大神見諒,非專業出身,I/O 模型實在不知道怎么表現才真正準確,自己也很淺

  • clover
    clover 2015-06-12 07:52

    已經很棒了

欧美性久久久久