Как меньший канал ускоряет поток данных? - PullRequest
1 голос
/ 10 августа 2010

Труба 1 МБ:

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 с
Все, что ниже 10 Кб, 1 мин 33 с

Как это может быть?

1 Ответ

4 голосов
/ 10 августа 2010

Меньше ожидания.

Если буфер канала слишком велик, то один процесс записывает все данные и закрывает свой конец канала до того, как второй процесс даже начнется.

Когда каналслишком велик, процессы выполняются последовательно.

...