简单快速的读取过程

时间:2019-03-25 14:00:38

标签: c++ c multithreading

我想在非常慢的设备(读取速度= 1Mo / s)上从文件中解压缩数据。解压缩算法至少可以执行此速度的三倍。 在C / C ++中并行执行这些任务的最快方法是什么,以免因解压缩而减慢读取过程,因此要使用最大带宽。

我已经用常规管道尝试了两个线程。但是我不知道这是否是最好的解决方案。至少它不是零拷贝算法。 我当前的算法是错误的,因为我无法成功在管道上执行阻塞IO。 (尝试过fcntl或fread / fdopen)

我无与伦比的程序非常简单。像

sudo ./gradlew assembleRelease

1 个答案:

答案 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
}

请注意,要使其正常工作需要正确掌握很多细节-多线程编程总是很棘手。