重疊IO學習心得

   想系統瞭解一下windows下面的幾種IO模式,現在從重疊IO開始。

 

   先說事件通知的重疊IO,時間通知的重疊IO的好處就是寫程序的時候可以先一股腦投遞n個IO的請求,然後將每個OVERLAPPED結構與一個event對象相關聯,再交給操作系統讓它自己慢慢處理去。然後投遞完所有的請求之後等待WaitForMultipleObjects返回(WaitForMultipleObjects返回了代表所有的IO操作都已經完成了),然後依次調用GetOverlappedResult來獲得IO操作的信息(其實GetOverlappedResult也會等待IO操作完成,不過到這裏已經完成了)。當然GetOverlappedResult之前在等待IO操作完成的時候程序還可以做些其他的事情。

 

   而重疊IO的另外一種模式就是異步過程調用,異步過程調用有點類似於創建線程函數createthread的做法,在讀寫操作的時候指定一個回調函數,讀取完畢之後程序自動從回調函數入口點來執行(支持重疊IO的讀寫操作函數如readfile、WSARecv等都會有個參數指定回調函數入口點),這樣把更多的操作放到重疊IO的處理函數中,主函數就可以騰出更多的時間幹正事。

 

   不論是哪種模式,其實原理都是一樣的,就是先把要讀寫的請求全部投遞了,然後主程序可以一邊做該做的事情一邊來等待IO的完成,IO完成以後(WaitForMultipleObjects返回之後)再處理數據。

 

   套用一段《Win32多線程程序設計》裏的話結尾:重疊IO可以讓你要求操作系統爲你傳送數據,並且再傳送完畢時通知你,它使你的程序在IO進行過程中仍然能夠繼續處理事務。事實上操作系統內部正是以線程來完成重疊IO。你可以獲得線程的所有利益,而不需付出什麼痛苦代價。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章