gpt4 book ai didi

C++/C多线程同时读取gz文件

转载 作者:太空狗 更新时间:2023-10-29 20:22:24 26 4
gpt4 key购买 nike

我正在尝试从多个线程读取 gzip 压缩文件。

我认为这会显着加快解压缩过程,因为我在多个线程中的 gzread 函数从不同的文件偏移量开始(使用 gseek),因此它们读取不同的部分文件。

简化后的代码是这样的

// in threads
auto gf = gzopen("file.gz",xxx);
gzseek(gf,offset);
gzread(xx);
gzclose(gf);

令我惊讶的是,我的多线程版本程序根本没有加速。 20 线程版本使用与单线程版本完全相同的时间。我很确定这离磁盘瓶颈还很远。

我猜 zlib inflation 功能可能需要解压缩整个文件才能阅读一小部分,但我未能从他们的手册中获得任何线索。

有人知道如何在我的案例中加快速度吗?

最佳答案

简短回答:由于压缩流的串行性质,gzseek() 必须解码从开始到请求的搜索点的所有压缩数据。因此,您无法从尝试做的事情中获得任何 yield 。事实上,花费的总周期将随着压缩数据长度的平方而增加!所以不要那样做。

关于C++/C多线程同时读取gz文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38014774/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com