【发布时间】:2019-03-25 14:00:38
【问题描述】:
我想从非常慢的设备(读取速度=1Mo/s)上的文件中解压缩数据。解压算法至少可以达到这个速度的三倍。 在 C/C++ 中并行化这些任务的最快方法是什么,这样读取过程不会因解压而减慢,从而使用最大带宽。
我已经用普通管道尝试了两个线程。但我不知道这是否是最好的解决方案。至少它不是零拷贝算法。 我当前的算法是错误的,因为我无法成功在管道上执行阻塞 IO。 (试过 fcntl 或 fread/fdopen)
我的无与伦比的程序非常简单。类似的东西
while(remainingToRead > 0){
int nb = fread(buffer, 1, bufferSize);
decompress(buffer, nb, bufferOut);
nb -= remainingToRead
}
【问题讨论】:
-
我不明白这个问题。如果程序是 IO 绑定的,多线程不会让它更快。
-
@NathanOliver 这是我的第一反应,但实际上这个问题有点道理。也就是说,在读取一个块之后,可以在读取下一个块的同时进行解压,因此解压根本不需要时间。
-
@NathanOliver,据我所知,这个想法是在解压缩时执行阅读
-
@Jabberwocky 啊,是的。这样你就只有一次解压的时间,再加上文件读取时间。
-
@NathanOliver 理解我的问题。这个想法是读取过程不要等待数据被解压缩并且可以以“最大”速度读取。
标签: c++ c multithreading