Windows異步IO四種方式


  我們知道,相對於計算機執行的其他操作而言,設備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、完成端口
  完成端口技術多用於處理大規模的請求,通過內在的進程池技術可以達到很高的性能,此時暫不做深入討論,若預知后事如何,請自己看,或等下回完成端口部分分解。
  好,至此,刀磨的差不多了,估計也飄了~~~~,干正事了。

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com