Brotli压缩多线程
Brotli compression multithreading
这是我的理解Brotli
stores blocksize information in a meta-block header with only the final uncompressed size of the block, and no information about the compression length (9.2). I'm guessing that a wrapper would be need to be created in order to use it with multiple threads, or possibly something similar to Mark Adler's pigz
.
在这种情况下,与 gzip 相同的线程原则是否适用于 Brotli,或者在多线程实现方面是否有任何可预见的问题需要注意?
为此,您可以按原样使用 brotli 格式。我让他们添加了将元数据放入空元数据块的选项(其中“空”意味着元数据块产生零未压缩数据)。您可以在元数据中放置标记以帮助查找元块。插入的空元块也在字节边界处开始下一个元块。
每个元块可以独立于其他元块。如果以这种方式构造流,那么在压缩或单独解压缩它们时将它们组合起来就没有问题。可能依赖的区域是使用的最后四个距离的环形缓冲区,以及超过当前元块开头的反向引用。对于并行使用,元块可以而且必须构造成不依赖于最后四个距离,在它被当前元块的距离填充之前不引用环形缓冲区。此外,不允许返回到当前元块之前的距离(不包括静态引用)。最后,您将附加一个空的或元数据元块,以将序列带到字节边界以便于连接。
顺便说一下,您似乎链接到旧版本的草稿格式。这里有一个link to the current version.
这是我的理解Brotli
stores blocksize information in a meta-block header with only the final uncompressed size of the block, and no information about the compression length (9.2). I'm guessing that a wrapper would be need to be created in order to use it with multiple threads, or possibly something similar to Mark Adler's pigz
.
在这种情况下,与 gzip 相同的线程原则是否适用于 Brotli,或者在多线程实现方面是否有任何可预见的问题需要注意?
为此,您可以按原样使用 brotli 格式。我让他们添加了将元数据放入空元数据块的选项(其中“空”意味着元数据块产生零未压缩数据)。您可以在元数据中放置标记以帮助查找元块。插入的空元块也在字节边界处开始下一个元块。
每个元块可以独立于其他元块。如果以这种方式构造流,那么在压缩或单独解压缩它们时将它们组合起来就没有问题。可能依赖的区域是使用的最后四个距离的环形缓冲区,以及超过当前元块开头的反向引用。对于并行使用,元块可以而且必须构造成不依赖于最后四个距离,在它被当前元块的距离填充之前不引用环形缓冲区。此外,不允许返回到当前元块之前的距离(不包括静态引用)。最后,您将附加一个空的或元数据元块,以将序列带到字节边界以便于连接。
顺便说一下,您似乎链接到旧版本的草稿格式。这里有一个link to the current version.