2016-07-03 25 views
5

E 'la mia comprensione Brotli negozi BLOCKSIZE informazioni in un colpo di testa meta-blocco con solo la dimensione non compressa finale del blocco, e nessuna informazione circa la lunghezza di compressione (9.2). Immagino che sarebbe necessario creare un wrapper per poterlo utilizzare con più thread, o forse qualcosa di simile a quello di Mark Adler pigz.compressione Brotli multithreading

Gli stessi principi di threading si applicano a Brotli come con gzip in questo caso, o ci sono problemi prevedibili da considerare quando si tratta di implementazioni multithreading?

risposta

8

È possibile utilizzare il formato brotli come è per questo scopo. Li ho fatti aggiungere l'opzione di mettere i metadati nei meta-blocchi vuoti (dove "vuoto" significa che il meta-blocco produce zero dati non compressi). Puoi mettere i marcatori nei metadati per aiutarti a trovare i meta-blocchi. Un meta-blocco vuoto inserito avvia anche il successivo meta blocco a un limite di byte.

Ogni meta blocco può essere indipendente dagli altri meta-blocchi. Se il flusso è costruito in questo modo, non vi è alcun problema con la combinazione di essi durante la compressione o la decompressione separata. Le aree di possibile dipendenza sono il buffer circolare delle ultime quattro distanze utilizzate e i riferimenti all'indietro oltre l'inizio del meta-blocco corrente. Per l'uso parallelo, un meta blocco può e deve essere costruito in modo da non dipendere dalle ultime quattro distanze, non facendo riferimento al buffer circolare fino a quando non è stato riempito con le distanze dal meta-blocco corrente. Inoltre, non saranno consentite distanze che arrivano prima del meta-blocco corrente (che non include riferimenti statici). Infine, si aggiunge un meta blocco vuoto o metadati per portare la sequenza su un limite di byte per una facile concatenazione.

A proposito, sembra che tu stia collegando una versione precedente del formato bozza. Ecco uno link to the current version.

+0

Questo aiuta un mucchio! Ero un po 'preoccupato per i meta-blocchi (come aveva proposto la bozza più vecchia), quindi sono davvero contento di vedere che l'opzione che hai messo in loro è ora disponibile. Esiste un modo preferito o consigliato per verificare/checksum del flusso; Stavo pensando che potrebbe non essere un problema se tutto si svolgesse a livello locale, anche se forse non ci potrebbe essere un bisogno, forse. Grazie mille! –

+1

Mi hanno chiesto di proporre un formato wrapper per brotli con controlli di integrità e altre funzionalità, cosa che ho fatto e che è possibile [trovare qui] (https://github.com/madler/brotli/blob/master/br-format- v3.txt). Tuttavia non so che l'abbiano accettato o raccomandato. –