2017-05-29 10 views
0

私の入力データは小さな塊になり、出力はディスク上のファイルに保存されます。私は、入力と出力の両方のための最速の戦略を探しています。 ZLIB deflate:メモリ割り当てとファイル出力の最速戦略ですか?

  1. は、それは)(収縮を呼び出す前に、より多くのデータを蓄積するために大きな入力バッファを作成しても意味がない、またはそれは、各小入力チャンクのためのdeflate()を呼び出す方が良いでしょうか?入力に最適なバッファサイズは何ですか?

  2. deflate()を使用してメモリからの出力をfwrite()でファイルに書き出すか、ファイルに直接書き込むgzfwriteのようなコンボ関数を使用すると高速ですか?

  3. 上記のいずれのファイルマッピングよりも高速なファイルマッピングですか?

  4. 複数のスレッドで圧縮を並列化する方法はありますか?

答えて

2
  1. デフレートは内部で入力されたデータを蓄積し、それを収縮させるために供給する前に、それを自分の蓄積に多くの貯蓄がないでしょう。 (膨らませるためのストーリーは違っていて、それぞれの膨らんだ通話に大量の圧縮データを送ることに大きな利点があります)。

  2. deflateを使うと何が起こっているのかは変わりません直接。低レベルの入出力機能を使用して、余分なレベルのバッファリングを避けることができます。

  3. mmap()をファイルの簡単なシーケンシャル書き込みに使用することには利点があり、不利な点があるとは思えません。それはmmap()のためではありません。

  4. はい。例については、pigzを参照してください。