我想在非常慢的设备(读取速度= 1Mo / s)上从文件中解压缩数据。解压缩算法至少可以执行此速度的三倍。 在C / C ++中并行执行这些任务的最快方法是什么,以免因解压缩而减慢读取过程,因此要使用最大带宽。
我已经用常规管道尝试了两个线程。但是我不知道这是否是最好的解决方案。至少它不是零拷贝算法。 我当前的算法是错误的,因为我无法成功在管道上执行阻塞IO。 (尝试过fcntl或fread / fdopen)
我无与伦比的程序非常简单。像
sudo ./gradlew assembleRelease
答案 0 :(得分:3)
这里的一种解决方案是使用单独的线程读取和解压缩,并使用两个缓冲区,以便这些操作可以重叠。
伪代码:
读取线程:
while (not finished)
{
while (no buffers free)
wait on condition variable
fill next buffer
mark buffer in use
set condition variable for decompression thread
}
减压线程:
while (not finished)
{
while (no buffers full)
wait on condition variable
decompress next buffer
mark buffer free
set condition variable for read thread
}
请注意,要使其正常工作需要正确掌握很多细节-多线程编程总是很棘手。