`xz` 的多处理器支持?

Posted

技术标签:

【中文标题】`xz` 的多处理器支持?【英文标题】:Multiprocessor support for `xz`? 【发布时间】:2014-03-07 08:22:00 【问题描述】:

有没有办法将xz 压缩工作分散到多个 CPU 上?我意识到xz 本身似乎不可能做到这一点,但是是否还有其他实用程序可以实现相同的压缩算法,从而提高处理器的利用率?我将在具有 16 个以上处理器的系统上的脚本和实用程序应用程序中运行它,至少使用 4-8 个处理器可能会提高压缩率。

【问题讨论】:

github.com/vasi/pixz 谢谢,效果很好。就输出大小而言,效率不如 xz 本身,我希望它能输出 .xz 兼容的文件,但这还不错。 【参考方案1】:

5.2 版xz 中添加了多处理器(多线程)压缩支持in December 2014。

要启用该功能,请添加 -T 选项以及要生成的工作线程数,或 -T0 以生成操作系统报告的 CPU 数量:

xz -T0 big.tar
xz -T4 bigish.tar

默认单线程操作相当于-T1

我发现使用比我的 CPU 上的超线程总数少的几个超线程运行它 可以很好地平衡响应速度和压缩速度。

† 所以 -T10 在我的 6 核 12 线程工作站上。

正如scai和Dzenly在cmets中所说的

如果您想将它与tar 结合使用,只需在之前调用export XZ_DEFAULTS="-T 0"

或使用类似:XZ_OPT="-2 -T0"

【讨论】:

如果您想将它与tar 结合使用,请先致电export XZ_DEFAULTS="-T 0" 或使用类似:XZ_OPT="-2 -T0" 我使用了 XZ -T4 选项,但我只看到一个处理器被使用。 看来用多核解压是行不通的,即xz --decompress -T0 file.tar.xz。解压本质上是不是与 xz 不可并行? 线程是所有关于加速压缩@jmon12,因为相比之下解压缩是微不足道的。从手册页“线程解压尚未实现。它只适用于包含多个块的文件,块头中有大小信息。所有以多线程模式压缩的文件都满足此条件,但以单线程模式压缩的文件即使使用--block-size=size,模式也不会。"

以上是关于`xz` 的多处理器支持?的主要内容,如果未能解决你的问题,请参考以下文章

Java线程

tar命令解压压缩gz/bz2/xz文件

运维 - 基础点

如何使用 Spring/Servlets 支持批量 Web api 请求处理

青客宝团队-多线程分享

「回顾」自然语言处理中的多任务学习