我的输入数据以小块形式出现,输出保存到磁盘上的文件中。我正在寻找最快的输入和输出策略。
在调用deflate()之前创建更大的输入缓冲区来累积更多数据是否有意义,或者为每个小输入块调用deflate()更好?输入的最佳缓冲区大小是多少?
更快的是:使用deflate()并使用fwrite()将内存中的输出写入文件,或使用直接写入文件的gzfwrite等组合函数?
文件映射是否比上述任何一个更快?
有没有办法在多个线程中并行化压缩?
答案 0 :(得分:2)
deflate在内部累积输入数据,因此在进行放气之前自己累积它不会有太大的节省。 (膨胀的故事是不同的,在每次充气呼叫中输入大量压缩数据有显着优势。)
没有区别,如果您直接使用deflate,您可以更好地控制正在进行的操作。您可以使用低级别的i / o函数来避免额外的缓冲级别。
我怀疑使用mmap()
进行文件的简单顺序写入会有任何优势,并且可能存在缺点。这不是mmap()
的用途。
是。有关示例,请参阅pigz。