解释lz4双缓冲区例子
Explain lz4 double buffer example
在lz4的例子中,有一个doublebuffer "https://github.com/Cyan4973/lz4/blob/master/examples/blockStreaming_doubleBuffer.c"。这在读取压缩循环期间使用 char inpBuf[2][BLOCK_BYTES]
并交替使用 inpBuf[0][]、inpBuf[1][]。
我无法理解这样做的好处。为什么不使用单个缓冲区?我错过了什么?
双缓冲区的好处是压缩比更好。这仅在您没有足够的内存将整个 object/file 作为一个块放入内存时才有用。
这并不明显。所以它值得一个比较来检查。
想更直接体验的可以做这个练习:
1) 压缩一个文件,把它分成4 KB 的块,然后单独压缩每个块。注意最后的压缩比。
2) 压缩同一个文件,但使用具有 2 个 4 KB 块的双缓冲区,应用与示例中提供的方法相同的方法。注意最后的压缩比,应该会有很大的提升。
3) 为了更合适的比较,重做测试 1,但这次使用 8 KB 独立块,以便实现 2 和 3 使用相同数量的内存。您应该再次注意到实施 2 提供了更好的压缩率。
4) 如果使用 LZ4 的 "HC" 版本而不是 "fast" 版本,比率差异会更加明显。
所以,总结一下:
- 如果你有足够的内存来容纳你的整个object/file到内存中,你不需要使用这个方法
- 如果您必须将输入数据切割成更小的块,您可以 select 通过使用双缓冲区而不是独立块来体验更好的压缩比。缺点是设置起来比较复杂。
在lz4的例子中,有一个doublebuffer "https://github.com/Cyan4973/lz4/blob/master/examples/blockStreaming_doubleBuffer.c"。这在读取压缩循环期间使用 char inpBuf[2][BLOCK_BYTES]
并交替使用 inpBuf[0][]、inpBuf[1][]。
我无法理解这样做的好处。为什么不使用单个缓冲区?我错过了什么?
双缓冲区的好处是压缩比更好。这仅在您没有足够的内存将整个 object/file 作为一个块放入内存时才有用。
这并不明显。所以它值得一个比较来检查。
想更直接体验的可以做这个练习:
1) 压缩一个文件,把它分成4 KB 的块,然后单独压缩每个块。注意最后的压缩比。
2) 压缩同一个文件,但使用具有 2 个 4 KB 块的双缓冲区,应用与示例中提供的方法相同的方法。注意最后的压缩比,应该会有很大的提升。
3) 为了更合适的比较,重做测试 1,但这次使用 8 KB 独立块,以便实现 2 和 3 使用相同数量的内存。您应该再次注意到实施 2 提供了更好的压缩率。
4) 如果使用 LZ4 的 "HC" 版本而不是 "fast" 版本,比率差异会更加明显。
所以,总结一下:
- 如果你有足够的内存来容纳你的整个object/file到内存中,你不需要使用这个方法
- 如果您必须将输入数据切割成更小的块,您可以 select 通过使用双缓冲区而不是独立块来体验更好的压缩比。缺点是设置起来比较复杂。