2017-05-29 64 views
0

我的輸入數據以小塊形式出現,輸出保存到磁盤上的文件中。我正在爲輸入和輸出尋找最快的策略。ZLIB deflate:內存分配和文件輸出的最快策略?

  1. 是否有意義,以創建一個更大的輸入緩衝區)調用放氣(之前積累更多的數據,或者最好是叫放氣(),每個小的輸入塊?輸入的最佳緩衝區大小是多少?

  2. 什麼是更快:使用deflate()並將輸出從內存寫入fwrite()的文件,或使用組合函數(如直接寫入文件的gzfwrite)?

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

  4. 有沒有辦法在多線程中並行壓縮?

回答

2
  1. 放氣積聚在內部的輸入數據,所以不會有太多的積蓄在餵養它放氣之前自己積累它。 (對於充氣的故事是不同的,其中有一個顯着的優勢是向每次充氣呼叫提供大量的壓縮數據。)

  2. 沒有區別,並且您可以更好地控制發生了什麼,如果使用deflate直。您可以使用低級I/O功能來避免額外的緩衝級別。

  3. 我懷疑使用mmap()進行文件的簡單順序寫入會有什麼好處,並且可能有缺點。這不是mmap()的用途。

  4. 是的。一個例子見pigz