6

私の理解Brotliでは、ブロックサイズ情報は、ブロックの最終的な非圧縮サイズのみでメタブロックヘッダーに保存され、圧縮長に関する情報はありません( 9.2 )。複数のスレッドで使用するには、ラッパーを作成する必要があると思います。または、Mark Adler のpigz.

この場合、gzip の場合と同じスレッド化の原則が Brotli に適用されますか?それとも、マルチスレッド化の実装に関して認識すべき予見可能な問題はありますか?

4

1 に答える 1

9

この目的のために、brotli 形式をそのまま使用できます。メタデータを空のメタブロックに入れるオプションを追加してもらいました (「空」とは、メタブロックが非圧縮データを生成しないことを意味します)。メタブロックを見つけやすくするために、メタデータにマーカーを入れることができます。挿入された空のメタブロックも、バイト境界で次のメタブロックを開始します。

各メタブロックは、他のメタブロックから独立できます。ストリームがそのように構築されている場合、それらを圧縮または個別に解凍するときにそれらを結合しても問題はありません。依存関係の可能性がある領域は、使用された最後の 4 つの距離のリング バッファーと、現在のメタブロックの先頭を過ぎた後方参照です。並行して使用する場合、現在のメタブロックからの距離が満たされるまでリング バッファを参照せずに、最後の 4 つの距離に依存しないようにメタ ブロックを構築することができ、構築する必要があります。さらに、現在のメタブロックの前に戻る距離は許可されません (これには静的参照は含まれません)。最後に、空のメタブロックまたはメタデータ メタブロックを追加して、シーケンスをバイト境界に移動し、連結を容易にします。

ところで、古いバージョンのドラフト フォーマットにリンクしているようです。ここに現在のバージョンへのリンクがあります。

于 2016-07-03T16:10:44.217 に答える