我們首先來認識一下傳統的i/o操作。
假如說使用者程序現在要把乙個檔案複製到另乙個地方。
那麼使用者程式必須先把這個檔案讀入記憶體,然後再把記憶體裡的資料寫入另乙個檔案。
不過檔案讀入記憶體也不是直接讀入使用者程序的記憶體,而是先讀入作業系統核心的記憶體,然後再從作業系統核心的記憶體區讀到使用者程序的記憶體。
與之對應的是,寫檔案也不是直接寫到磁碟上的檔案,而是使用者程序先把自己記憶體的資料傳到作業系統核心的記憶體,然後再從作業系統核心的記憶體區寫到磁碟。而這其中涉及到諸多的系統呼叫。
因此看上去簡單的操作至少要分為四部
1磁碟檔案讀入作業系統
2作業系統讀到使用者程序
3使用者程序寫到作業系統
4作業系統寫入磁碟檔案
零拷貝和傳統i/o有和不同?
零拷貝就是指,傳輸乙個檔案的時候,不需要把檔案讀到使用者程序再處理,而是直接把檔案讀到作業系統乙個記憶體區,然後再移動到作業系統的另乙個記憶體區,最後寫入檔案。
這樣一來,步驟變成這樣:
1磁碟檔案讀入作業系統
2作業系統把資料寫入作業系統另乙個區域
3作業系統寫入磁碟檔案
雖然只少了一步,但是這裡不僅減少了資料移動的時間損耗,而且減少了系統呼叫的次數,因此大大縮短了時間。
什麼是零拷貝?一招學會高效傳輸檔案
差一點我們就擦肩而過了 有趣有用 有態度 導學問題 1.伺服器通過網路傳輸資料時,系統有幾次拷貝?2.大檔案和小檔案各有什麼傳輸特點?零拷貝 zero copy 技術指在計算機執行操作時,cpu 不需要先將資料從乙個記憶體區域複製到另乙個記憶體區域,從而可以減少上下文切換以及 cpu 的拷貝時間。某...
什麼是拷貝建構函式
拷貝建構函式是一種特殊的建構函式,它的形式如下。struct test test const test other 拷貝建構函式 以下幾種情況會呼叫拷貝建構函式。struct test test const test other 函式以類物件為引數,會呼叫test的拷貝建構函式 void testf...
C 什麼是深淺拷貝,深淺拷貝的區別?
淺拷貝 class string string const string s str s.str string operator const string s 返回引用是為了連續的賦值 return this string 防止野指標的出現 str null char str get void st...