有一个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秒
怎么会这样?
减少等待。
如果管道缓冲区太大,则在第二个进程甚至开始之前,一个进程会写入所有数据并关闭管道的末端。
当管道太大时,这些过程是连续执行的。