小pipe道如何加速数据stream?

有一个1MB的pipe道:

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. 

当我把pipe子做得更小的时候,发送和阅读的总时间缩短了很多。

将pipe道大小更改为 –
1024 * 1024 = 2分钟(原始尺寸)
1024 * 512 = 1分47秒
10,000 = 1分33秒
低于10k,1min 33秒

怎么会这样?

减少等待。

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

当管道太大时,这些过程是连续执行的。