硬盤速度和網絡速度的關系?
主流的機械硬盤速度大概在50-150MB/s之間,SSD大概是150-500MB/s,主流的CPU(帶流水線)、內存的速度大概是硬盤速度的100~1000倍左右。換句話說,如果一個解壓算法,平均解壓一個字節消耗的指令數如果少于100個,那么硬盤速度就很難趕上CPU速度了;如果平均解壓一個字節消耗的指令數少于1000個,那么絕大多數機械硬盤很難趕上CPU速度。所以,瓶頸在哪,主要看解壓的過程中的CPU負擔。通常情況下,zip的解壓字典只有32K或者64K,解壓的過程中并非每次都搜索完整的字典,所以zip默認配置下很難占滿CPU,如果考慮到多核的話,每個核的負擔可以更低,磁盤IO的負擔會更重,瓶頸效果會更明顯。如果要讓CPU成為瓶頸,需要調整一些壓縮的策略,比如:1. 字典要更大,查找速度會更慢,如果字典比內存還大就更好了(7zip最大可以配置1G的字典)。2. 文件的信息熵要足夠大,換句話說文件本身更難以壓縮,比如已經被壓縮過的視頻文件,這樣解壓時查字典的負擔會更重。3. 解壓到內存里,或者至少是SSD里。4. 壓縮的時候選擇用AES-256加密一下。5. 挑一個性能比較弱的CPU解壓。滿足以上條件的情況下,就可以讓CPU成為瓶頸了。但這樣的條件很難達到,因為滿足以上條件,會讓壓縮的過程變得非常慢,比如7zip的LZMA2算法中,把字典配到1G,線程數16的情況下,壓縮需要內存是88G左右,絕大多數PC的內存都不夠用。在超級計算機上壓縮,到普通計算機上解壓就有可能吃滿CPU。對于通常情況下來說,解壓文件瓶頸在硬盤,只有在一定特定的場景下,CPU才會成為瓶頸。補充一點:如果解壓的是零碎的小文件,速度沒有參考價值。小文件的實際寫入開銷比文件實際大小要大的多。參考:解壓縮的速度和什么有關? - 計算機解壓縮操作為什么不吃CPU? - 計算機