回覆列表
  • 1 # 使用者2113003681968

    主流的機械硬碟速度大概在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? - 計算機

  • 中秋節和大豐收的關聯?
  • 1500米要穿釘鞋不?