1. <em id="vzzs9"></em>
      <tbody id="vzzs9"></tbody>

    2. <span id="vzzs9"></span>
      <progress id="vzzs9"></progress>
      首頁 運維干貨Linux高手入門:Linux五種I/O模型

      Linux高手入門:Linux五種I/O模型

      運維派隸屬馬哥教育旗下專業運維社區,是國內成立最早的IT運維技術社區,歡迎關注公眾號:yunweipai
      領取學習更多免費Linux云計算、Python、Docker、K8s教程關注公眾號:馬哥linux運維

      Linux:一切皆文件

      Linux將所有外部設備都看做文件,對文件的讀寫操作會調用內核提供的系統命令,返回一個file descriptor(fd,文件描述符)。

      Linux也把socket當成文件,稱為socketfd(socket描述符)。

      描述符是一個數字,該數字指向內核中的一個結構體(該結構體包含文件路徑,數據區等屬性)。

      模型一:阻塞I/O模型

      在進程空間中調用recvfrom,該系統調用直到數據包到達且被復制到應用進程的緩沖區中或者發生錯誤時才返回,次期間將會一直等待。

      進程從調用recvfrom方法開始到recvfrom方法返回的期間都是被阻塞的。

      Linux高手入門:Linux五種I/O模型插圖

      模型二:非阻塞I/O模型(輪詢式)

      調用recvfrom方法后,如果內核該緩沖區沒有數據,就直接返回一個EWOULDBLOCK錯誤。

      Linux高手入門:Linux五種I/O模型插圖1

      模型三:I/O復用模型(select/poll)

      Linux提供了select/poll函數,進程通過將一定數量的fd傳遞給select/poll函數。

      select函數會被阻塞,select/poll函數偵測多個fd是否處于就緒狀態。

      select/poll是順序掃描fd是否就緒的,而且支持的fd數量是有限。

      模型四:I/O復用模型(epoll)

      Linux提供了一個epoll函數,epoll函數使用事件驅動方式代替順序掃描,因此性能更高。當有fd就緒時,立即調用回調函數。

      Linux高手入門:Linux五種I/O模型插圖2

      模型五:信號驅動I/O模型

      先開啟套接口的信號驅動I/O功能,sigaction函數安裝一個信號處理函數(sigaction函數立即返回,進程繼續工作,它是非阻塞的)。

      當數據準備就緒時,就為該進程生成一個SIGIO信號,通過信號回調通知應用程序調用recvfrom來讀取數據。

      Linux高手入門:Linux五種I/O模型插圖3

      異步I/O

      調用系統函數通知內核啟動某個操作,并讓內核在整個操作完成后(包括將數據從內核復制到用戶自己的緩沖區)通知我們。

      Linux高手入門:Linux五種I/O模型插圖4

      Linux I/O模型的總結

      • IO主要涉及兩步操作:
      • 等待內核數據準備完成
      • 數據從內核復制到用戶空間
      • I/O模式的改進就是不斷減少在這兩步所花的時間。
      • 阻塞I/O: 兩個階段阻塞
      • 非阻塞I/O: 待內核數據準備完成期間輪詢(等同阻塞,也可以多個I/O一起輪詢) ,數據從內核復制到用戶空間阻塞
      • I/O復用: 等待內核數據準備完成期間可以多個I/O輪詢,數據從內核復制到用戶空間阻塞
      • 信號驅動I/O:數據從內核復制到用戶空間期間線程阻塞
      • 異步I/O:完全不阻塞

      Linux信號驅動I/O與異步I/O的區別

      • 信號驅動I/O:內核通知程序何時可以開始一個I/O操作;
      • 異步I/O: 內核通知程序I/O操作何時已完成,也就是說數據準備和數據復制到用戶空間都是系統完成的。

      原文:Python運維圈

      本文鏈接:http://www.abandonstatusquo.com/22276.html

      網友評論comments

      發表評論

      您的電子郵箱地址不會被公開。

      暫無評論

      Copyright ? 2012-2022 YUNWEIPAI.COM - 運維派 京ICP備16064699號-6
      掃二維碼
      掃二維碼
      返回頂部
      久久久久亚洲国内精品|亚洲一区二区在线观看综合无码|欧洲一区无码精品色|97伊人久久超碰|一级a爱片国产亚洲精品