Trying to understand why LZ77 decode is usually sequential
Author: yasha1971-coderCreated Mar 27, 2026Updated Mar 27, 2026
Hi,
I’ve been playing around with an LZ77-like idea and ran into something I don’t fully understand.
I managed to get around ~10 GB/s decode (bit-perfect) on a ~1GB file, while still keeping a global compression context.
What I did (roughly):
- matches are found globally (not per block)
- but I split the output into blocks
- and store offsets so each block knows where its data is (literals / offsets / lengths)
So blocks are not compressed independently, but I try to make them independently decodable.
This seems to allow parallel decode, which is where the speed comes from.
I feel like I’m probably missing something obvious, because I don’t really see this approach used.
So I’m wondering:
- why is LZ77 decode usually kept strictly sequential?
- is this kind of approach already known and I just don’t know about it?
- what would likely break with this in a real implementation?
Happy to share more details if needed.
For reference: the four streams (literals / offsets / lengths / commands) are entropy-coded as single global zstd frames, not per-block.
Thanks
Source: lz4/lz4