代码之家  ›  专栏  ›  技术社区  ›  noobcoder

如何为PIGZ(并行gzip)准备放气流?

  •  3
  • noobcoder  · 技术社区  · 8 年前

    我正在使用PIGZ库。 https://zlib.net/pigz/

    我使用这个库对每个文件使用多个线程来压缩大型文件,现在我也想对每个文件使用多个线程来解压缩这些文件。根据文件:

    解压缩不能并行化,至少没有专门的 为此目的准备了放气流。

    然而,文档并没有具体说明如何做到这一点,我发现很难找到这方面的信息。

    我将如何创建PIGZ可用于减压的“特殊准备的放气流”?

    1 回复  |  直到 8 年前
        1
  •  5
  •   Mark Adler    8 年前

    pigz目前不支持并行解压缩,因此专门准备这样一个放气流是没有帮助的。

    尚未实现此功能的主要原因是,在大多数情况下,解压缩速度足够快,可以绑定到i/o,而不是处理器。压缩的情况并非如此,它可能比解压缩慢得多,并行压缩可以大大加快速度。

    您可以使用zlib和pthread编写自己的并行解压缩程序。pigz 2.3.4及更高版本实际上将通过使用--independent(-i)选项为并行解压缩生成一个专门准备的流。这使得块可以独立解压缩,并在每个块前面放置两个同步标记,以便通过扫描压缩数据快速找到它们。块的未压缩大小设置为--blocksize或-b。您可能希望使该大小大于默认值,例如1M而不是128K,以减少使用-i的压缩影响。一些测试将告诉您使用-i可以减少多少压缩。

    (顺便说一下,pigz不是一个库,它是一个命令行实用程序。)