為程序分配更多記憶體和 cpu 資源
我正在執行
unzip
解壓縮大文件。但是,我的 cpu 使用率低於 15%,ram 僅使用 8 GB 中的 1-1.2 GB。有沒有辦法為這個
unzip
程序分配更多的 CPU 功率和記憶體?謝謝你。
我在 Lubuntu 16.04
程序會佔用它們所能獲得的所有記憶體和 CPU 能力,除非它們有內置的限制。
unzip
沒有這樣的內置限制。你可以少給它,但你不能給它更多,因為預設情況下它可以隨心所欲。解壓縮不是一個記憶體密集型過程。解壓縮大型存檔的主要記憶體成本是 unzip 將文件列表保留在記憶體中。
速度的限制因素可能是 CPU 功率或磁碟(如果您正在向網路讀取或寫入文件,則可能是網路)。這取決於您的磁碟相對於 CPU 的速度。檢查程序是否佔用了一個核心的 100%。如果不是,那麼加速它的唯一方法就是加速輸入/輸出。這可能意味著更快的磁碟,或者安排將輸入和輸出放在不同的磁碟上。
如果該過程佔用一個核心的 100%,那麼您可以通過並行化來加速它。對於許多壓縮格式,一個文件的解壓縮本質上是不可並行的,因為該格式具有很強的適應性:壓縮是通過尋找重複的模式並通過對先前模式的一些間接引用來替換它們來實現的。一些壓縮格式具有允許獨立解壓縮每個塊的“重新初始化點”;我知道這至少是 bzip2 的情況。即使格式不需要,一些壓縮工具也會這樣做。但據我所知,zip 並非如此。另一方面, zip 單獨壓縮存檔的每個成員,因此可以單獨解壓縮每個文件。因此,如果你有n核心,您可以讓它們都忙於解壓縮單獨的文件(如果您的 I/O 速度最快)。
然後問題是找到一個並行的解壓縮實現。我認為p7zip支持它
7z x -mmt=on foo.zip
或7z x -mmt=8
(使用 8 個核心),但 p7zip 的文件不是很好,我還沒有確認這確實可以並行化。