2016-07-03 31 views
5

Rozumiem, że przechowuje informacje o blokach w nagłówku meta-bloku z ostatecznym nieskompresowanym rozmiarem bloku i brak informacji o długości kompresji (9.2). Zgaduję, że trzeba utworzyć opakowanie, aby można było użyć go z wieloma wątkami lub, być może, czegoś podobnego do Mark Adlera: pigz.Wielowątkowość kompresji Brotli

Czy te same zasady odnoszą się do Brotli, podobnie jak w przypadku gzip w tym przypadku, czy są jakieś przewidywalne problemy, o których należy pamiętać, jeśli chodzi o implementacje wielowątkowe?

Odpowiedz

8

Możesz użyć formatu brotli w tym celu. Mam je dodać opcję umieszczania metadanych w pustych meta-blokach (gdzie "pusty" oznacza, że ​​meta-blok generuje zero nieskompresowanych danych). Możesz umieścić znaczniki w metadanych, aby ułatwić znalezienie meta-bloków. Wstawiony pusty meta-blok także rozpoczyna następny meta-blok na granicy bajtu.

Każdy blok meta-blokowy może być niezależny od innych bloków meta. Jeśli strumień jest skonstruowany w ten sposób, nie ma problemu z łączeniem ich podczas kompresji lub osobnej dekompresji. Obszarami możliwej zależności są bufor pierścieniowy dla czterech ostatnich odległości, a także odniesienia wstecz za początkiem bieżącego meta-bloku. W przypadku zastosowania równoległego, blok meta może i musi być skonstruowany w taki sposób, aby nie zależał od ostatnich czterech odległości, nie odnosząc się do bufora pierścieniowego, dopóki nie zostanie wypełniony odległościami od bieżącego bloku meta. Ponadto odległości, które sięgają wstecz przed bieżącym meta-blokiem, nie byłyby dozwolone (co nie zawiera żadnych odniesień statycznych). Na koniec dołaczysz pusty meta-blok lub meta-blok, aby przenieść sekwencję do granicy bajtów w celu łatwej konkatenacji.

Nawiasem mówiąc, wygląda na to, że łączysz ze starszą wersją wersji roboczej. Oto link to the current version.

+0

To pomaga grom! Trochę się martwiłem meta-blokami (jak zaproponował starszy projekt), więc naprawdę cieszę się, że opcja, którą je wprowadziłeś, jest już dostępna. Czy istnieje preferowany lub zalecany sposób weryfikacji/sumy kontrolnej strumienia; Pomyślałem, że nie byłoby problemu, gdyby wszystko odbywało się lokalnie, choć jeśli nie, być może jest to potrzebne. Dziękuję Ci bardzo! –

+1

Poprosili mnie o zaproponowanie formatu otoki dla brotli z kontrolą integralności i innymi funkcjami, które zrobiłem i które można [tutaj znaleźć] (https://github.com/madler/brotli/blob/master/br-format- v3.txt). Jednak nie wiem, czy to zaakceptowali, czy zalecili. –