ZLIB deflate:最快的内存分配和文件输出策略?

时间:2017-05-29 12:59:24

标签: compression zlib

我的输入数据以小块形式出现,输出保存到磁盘上的文件中。我正在寻找最快的输入和输出策略。

  1. 在调用deflate()之前创建更大的输入缓冲区来累积更多数据是否有意义,或者为每个小输入块调用deflate()更好?输入的最佳缓冲区大小是多少?

  2. 更快的是:使用deflate()并使用fwrite()将内存中的输出写入文件,或使用直接写入文件的gzfwrite等组合函数?

  3. 文件映射是否比上述任何一个更快?

  4. 有没有办法在多个线程中并行化压缩?

1 个答案:

答案 0 :(得分:2)

  1. deflate在内部累积输入数据,因此在进行放气之前自己累积它不会有太大的节省。 (膨胀的故事是不同的,在每次充气呼叫中输入大量压缩数据有显着优势。)

  2. 没有区别,如果您直接使用deflate,您可以更好地控制正在进行的操作。您可以使用低级别的i / o函数来避免额外的缓冲级别。

  3. 我怀疑使用mmap()进行文件的简单顺序写入会有任何优势,并且可能存在缺点。这不是mmap()的用途。

  4. 是。有关示例,请参阅pigz