首页 > 解决方案 > zlib 中的函数 compress() / compress2() 是否可以在不破坏串行 inflate() 的情况下并行化

问题描述

我正在尝试并行化来自 zlib(compress / compress2 函数)的压缩调用,其中要压缩的数据和输出缓冲区在调用时可用。为了获得帮助,我正在关注 pigz ( https://zlib.net/pigz/ ) 的代码,它是一个实用程序并处理文件,因此我必须编写类似但能够拦截对 compress/compress2 的调用。此外,我假设对 compress/compress2 函数的调用将具有合理的数据大小,因此并行化是有意义的。还假设应用程序使用 inflateInit_ / inflate / inflateEnd 函数进行透明串行解压缩。还要考虑压缩比的折衷。

  1. 我不完全理解 pigz 中的写线程如何处理来自多个压缩线程的输出,这些线程不在字节边界上?
  2. 如果存在具有一定空间开销的同步标记,是否会违反为 compress/compress2 函数调用提供的输出缓冲区大小?
  3. 这个并行生成的 deflate 流是否会被 inflate 调用以串行方式透明地处理。

标签: parallel-processingzlibdeflateinflate

解决方案


推荐阅读