xz 多執行緒壓縮支援詳解

2021-10-03 10:05:51 字數 1256 閱讀 4979

xz -9 -k -z release.tar

使用xz進行多執行緒壓縮:

xz -9 -t 12 -k -z release.tar

但是使用時你會發現,很多時候使用-t引數不能全核編譯,我在一台6核12執行緒的機器上,壓縮乙個1.2g的檔案。使用-t -9也就是採用最高壓縮率的時候,cpu的最高佔用率只能達到600%,使用-t -6的時候,才可以用到全部的12核編譯。

造成這個問題的原因,和xz多執行緒壓縮的原理有關。

多執行緒壓縮的時候,xz會將待壓縮的檔案分成幾個部分,每乙個執行緒壓縮乙個部分。

預設情況下,分塊的大小是lzma2資料夾的三倍。使用-6,目錄大小為8mib,並且塊大小24 mib。

而對於-9,它們是64 mib和192 mib。

所以如果輸入檔案不夠大,就無法使用所有cpu核心。

當然,塊大小可以使用--block size=size選項進行調整。

減小塊大小往往會降低壓縮率,並且會對記憶體造成很大的占用。以換取壓縮速率上的提公升。

需要注意的是,設定分割塊的大小,不能小於lzma2資料夾的大小。所以使用-9時,塊大小的設定也不能低於64mib。

更改塊大小影響壓縮時候的ram使用,如果設定不合理很可能記憶體會爆掉,可以在使用xz命令的時候加乙個-vv(即verbose兩次)看到需要多少記憶體占用。還可以檢視到壓縮進度,剩餘時間等資訊:

為了提高效率,如果你明確知道輸入檔案大小時,可以手動調整塊大小:n*max_number_of_threads*block_size=input_file_size

嘗試使用n=1可能會提供最好的壓縮速率,但是大檔案的時候ram的使用可能會非常大,並且壓縮率可能也不太好因為不同的塊可能需要不同的壓縮時間

比如:

使用--memlimit-compress可以有效地避免壓縮過程中記憶體被爆掉的情況,比如把下面這一行內容加到~/.bashrc中:

export xz_defaults=--memlimit-compress=12gib

它只會對xz工具生效

詳解Springboot對多執行緒的支援

這兩天看阿里的j a開發手冊,到多執行緒的時候說永遠不要用 new thread 這種方式來使用多執行緒。確實是這樣的,我一直在用執行緒池,到了springboot才發現他已經給我們提供了很方便的執行緒池機制。本部落格 託管在github上 一 介紹 spring是通過任務執行器 taskexecu...

Linux 高壓縮率工具 XZ 壓縮詳解

目錄 四 擴充套件 公尺妮文學網 m.amini.net xz 壓縮比比較高,在這裡沒有進行詳細對比。官網介紹到 壓縮後的檔案大小 gzip 小30 比bzip2小15 我測試 乙個 112m 的檔案,xz 壓縮完後 4.5m,gz 壓縮完後 16m,biz2 縮完後7.6m.壓縮比 xz biz2...

C 支援多執行緒

c 支援多執行緒並行執行程式 1.乙個程式由乙個單執行緒開始,該單執行緒由clr和作業系統建立而成,並具有多執行緒建立額外執行緒的功能.2.建立執行緒的方法 2.1通過thread類來建立執行緒.threadstart委託建立執行緒 threadstart ts new threadstart ru...