【问题标题】:Brotli compression multithreadingBrotli 压缩多线程
【发布时间】:2016-11-05 08:45:24
【问题描述】:

我的理解Brotli将块大小信息存储在元块标头中,只有块的最终未压缩大小,没有关于压缩长度的信息(9.2)。我猜测需要创建一个包装器才能将它用于多个线程,或者可能类似于 Mark Adler 的 pigz

在这种情况下,Brotli 的线程原则是否与 gzip 相同,或者在多线程实现方面是否有任何可预见的问题需要注意?

【问题讨论】:

    标签: multithreading compression gzip brotli


    【解决方案1】:

    为此,您可以按原样使用 brotli 格式。我让他们添加将元数据放入空元块的选项(其中“空”表示元块产生零未压缩数据)。您可以在元数据中放置标记以帮助查找元块。插入的空元块也会在字节边界处开始下一个元块。

    每个元块可以独立于其他元块。如果流是以这种方式构造的,那么在压缩或单独解压缩它们时将它们组合起来就没有问题。可能依赖的区域是使用的最后四个距离的环形缓冲区,以及超过当前元块开头的向后引用。对于并行使用,元块可以并且必须被构造为不依赖于最后四个距离,在它被与当前元块的距离填充之前不引用环形缓冲区。此外,不允许在当前元块之前返回的距离(其中不包括静态引用)。最后,您将附加一个空元块或元数据块,以将序列带到字节边界以便于连接。

    顺便说一句,您似乎正在链接到旧版本的草稿格式。这是link to the current version

    【讨论】:

    • 这对很多人都有帮助!我有点担心元块(正如旧草案所提议的那样),所以我很高兴看到你让它们放入的选项现在可用。是否有首选或推荐的方式来验证/校验流;我在想,如果一切都在本地进行,那可能不是问题,但如果不是,也许可能会有一些需要。非常感谢!
    • 他们让我提出一个带有完整性检查和其他功能的 brotli 包装格式,我做了,你可以find here。但是我不知道他们是否接受或推荐它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-28
    • 1970-01-01
    • 2015-11-09
    • 2021-09-15
    • 2021-12-16
    • 2021-02-10
    • 1970-01-01
    相关资源
    最近更新 更多