较小的管道如何加速数据流动?

时间:2010-08-10 02:21:36

标签: c++ windows multithreading winapi pipe

有一个1MB的管道:

if (0 == CreatePipe(&hRead,&hWrite,0,1024*1024))
{
printf("CreatePipe failed\n");
return success;
}

一次发送4000个字节(bytesReq = 4000)

while ((bytesReq = (FileSize - offset)) != 0)
{


//Send data to Decoder.cpp thread, converting to human readable CSV
        if ( (0 == WriteFile(hWrite,
                               readBuff,
                               bytesReq,
                               &bytesWritten,
                               0) ) || 
                               (bytesWritten != bytesReq) )
        {
             printf("WriteFile failed error = %d\n",GetLastError());
             break;
        } 

}  

Only 4 bytes at a time being read in at another thread, on other end of pipe.  

当我将管道缩小时,发送和读取的总时间变得更小。

将管道尺寸更改为 -
1024 * 1024 = 2分钟(原始尺寸)
1024 * 512 = 1分47秒
10,000 = 1分33秒
任何低于10k,1分33秒的东西

这怎么可能?

1 个答案:

答案 0 :(得分:4)

少等待。

如果管道缓冲区太大,那么一个进程会写入所有数据并在第二个进程开始之前关闭它的管道末端。

当管道太大时,流程会连续执行。