IO重疊的理解

2021-06-21 08:29:40 字數 898 閱讀 7393

這就是所謂的同步概念,乙個執行緒中只可能同時處理乙個i/o請求

你要知道,乙個i/o操作是非常耗時的,當你的**掛起後等待i/o完成的這段時間內,你的這個執行緒浪費了n個指令週期。

如果同時要反覆讀寫大檔案,用同步的效率是很低的。

為了解決這個問題,當cpu執行你的**時遇上乙個i/o請求後,系統這是為你開一根內部執行緒去處理i/o請求,並且你的執行緒並不掛起,但你可能會覺得如果i/o還沒完成,後續的**就算他讓我執行,我也執行不下去了嘛?

但如果後續的**和這個i/o操作無關,你就可以以更快的速度之行下去了,而無需等待io請求的完成了

這也就是非同步了

你想當你有這樣乙個請求,就是

readfile(...)                                 -1

writefile(...)                               -2

readfile(...)                                 -3

你在程式中如果使用同步的話,那只有當你完成1以後2才會繼續執行,2執行完以後3才會繼續執行。這就是同步。

當如果使用非同步的話,當系統遇到1時,ok,開一線程給它去完成該io請求,然後系統繼續執行2,3,分別開兩線程。

1-2-3如果是比較耗時的操作,尤其是運用在網路上,那麼1-2-3這三個io請求是並行的,也就是重疊的。

重疊i/o就是能夠同時以多個執行緒處理多個i/o,其實你自己開多個執行緒也可以處理多個i/o,當然系統內部優化以後肯定效能要比你的強,呵呵。

最後提一下重疊模型的缺點,他為每乙個io請求都開了一根執行緒,當同時有1000個請求發生,那麼系統處理執行緒上下文[context]切換也是非常耗時的,所以這也就引發了完成埠模型iocp,用執行緒池來解決這個問題,我就不多說了。

重疊I O詳解

在windows中有乙個api叫readfile bool readfile handle hfile,handle to file lpvoid lpbuffer,data buffer dword nnumberofbytestoread,number of bytes to read lpdw...

什麼是重疊I O

在windows中有乙個api bool readfile handle hfile,handle to file lpvoid lpbuffer,data buffer dword nnumberofbytestoread,number of bytes to read lpdword lpnum...

什麼是重疊I O

在windows中有乙個api叫readfile bool readfile handle hfile,handle to file lpvoid lpbuffer,data buffer dword nnumberofbytestoread,number of bytes to read lpdw...