Windows非同步IO四種方式

來源:互聯網
上載者:User
 我們知道,相對於電腦執行的其他動作而言,裝置IO(檔案、管道、通訊端等)是比較慢的。於是在多線程結構中就考慮到採用非同步方式進行裝置讀寫操作,即我們告訴系統對裝置的讀寫資料,而同時應用程式的其他代碼繼續執行,直到擷取裝置操作完畢的系統通知。
  在進行非同步IO時,我們先向系統發出IO請求,作業系統隊列化各種IO請求,並在內部完成操作,當系統在處理IO請求時,我們的線程可以返回繼續執行,當作業系統處理完IO請求之後,通知我們資料操作(發送、接收、出錯)完畢。
  Windows提供了四種非同步IO技術,機制幾乎時相同的,區別在於通知結果的方式不同:
  1、使一個裝置核心對象變為有訊號
  Windows將裝置控制代碼看作可同步的對象,即它可以處於有訊號或處於無訊號狀態,當建立裝置控制代碼、以非同步方式發送IO請求時,該控制代碼處於無訊號狀態,當非同步IO完成之後,該控制代碼受信,通過WaitForSingleobject或WaitForMultipleObjects函數可以判斷裝置操作何時完成。該技術只能用於一個裝置只發送一個IO請求,否則,若一個裝置對應多個操作,當控制代碼受信時無法判斷是該裝置的那個操作完成。 2、使一個事件核心對象變為有訊號
  針對每個I/O操作綁定一個核心事件對象,並將等待事件等待函數等待該事件的受信,當I/O操作完成後系統使得與該操作綁定的事件受信,從而判斷那個操作完成。該技術解決了使一個裝置核心對象變為有訊號技術中一個裝置只能對應一個操作的不足。
  3、警告I/O
  在該技術中,當發出裝置IO請求時,同時要求我們傳遞一個被稱為完成常式的回呼函數,當IO請求完成時調用該回呼函數完成我們需要處理的工作。該技術允許單個裝置同時進行多個I/O請求。
  4、完成連接埠
  完成連接埠技術多用於處理大規模的請求,通過內在的進程池技術可以達到很高的效能,此時暫不做深入討論,若預知後事如何,請自己看,或等下回完成連接埠部分分解。
  好,至此,刀磨的差不多了,估計也飄了~~~~,幹正事了。
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.