當前位置:編程學習大全網 - 編程語言 - c++網絡編程中~究竟什麽是異步IO ?還有那個select函數是異步IO?

c++網絡編程中~究竟什麽是異步IO ?還有那個select函數是異步IO?

異步文件IO也就是重疊IO。

在同步文件IO中,線程啟動壹個IO操作然後就立即進入等待狀態,直到IO操作完成後才醒來繼續執行。而異步文件IO方式中,線程發送壹個IO請求到內核,然後繼續處理其他的事情,內核完成IO請求後,將會通知線程IO操作完成了。

如果IO請求需要大量時間執行的話,異步文件IO方式可以顯著提高效率,因為在線程等待的這段時間內,CPU將會調度其他線程進行執行,如果沒有其他線程需要執行的話,這段時間將會浪費掉(可能會調度操作系統的零頁線程)。如果IO請求操作很快,用異步IO方式反而還低效,還不如用同步IO方式。

同步IO在同壹時刻只允許壹個IO操作,也就是說對於同壹個文件句柄的IO操作是序列化的,即使使用兩個線程也不能同時對同壹個文件句柄同時發出讀寫操作。重疊IO允許壹個或多個線程同時發出IO請求。

異步IO在請求完成時,通過將文件句柄設為有信號狀態來通知應用程序,或者應用程序通過GetOverlappedResult察看IO請求是否完成,也可以通過壹個事件對象來通知應用程序。

例如DeviceIoControl這個函數,他就可以通過參數指定是同步或異步,如果是同步的話,則該函數將會等待結果返回後,才執行下壹條語句。如果是異步的話,DeviceIoControl調用後馬上返回,如果參數正確,則回返回ERROR_IO_PENDING(忘了怎樣寫,不過肯定是有PENDING這個詞),然後妳可以通過GetOverlappedResult獲取返回結果,是壹個overlap結構,是在妳調用DeviceIoControl的最後壹個參數傳進去的``

簡單的說``同步在編程裏,壹般是指某個操作執行完後,才可以執行後面的操作``拿到IO上來說``就是我要做完這個IO操作``才繼續後面的操作```

異步則是,我交帶了某個操作給系統(可以是windows,也可以是妳自己的庫),我呆會過來拿,我現在要去忙別的``拿到IO上說``我交帶了某個IO操作給系統。。。。。

  • 上一篇:管道裏有什麽話?
  • 下一篇:對刀儀,刀庫,聯軸器`雕銑機用來幹什麽用
  • copyright 2024編程學習大全網