2017-05-29 50 views
0

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

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

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

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

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

回答

2
  1. 放气积聚在内部的输入数据,所以不会有太多的积蓄在喂养它放气之前自己积累它。 (对于充气的故事是不同的,其中有一个显着的优势是向每次充气呼叫提供大量的压缩数据。)

  2. 没有区别,并且您可以更好地控制发生了什么,如果使用deflate直。您可以使用低级I/O功能来避免额外的缓冲级别。

  3. 我怀疑使用mmap()进行文件的简单顺序写入会有什么好处,并且可能有缺点。这不是mmap()的用途。

  4. 是的。一个例子见pigz