Должен ли я буферизовать оба конца, когда `io :: copy`ing из stdin в TcpStream и наоборот? - PullRequest
0 голосов
/ 09 февраля 2020

I прочитайте , что рекомендуется обернуть io читателей и писателей в BufRead и BufWrite, чтобы не полагаться на слишком много системных вызовов. Я также понимаю, что это примерно производительность .

Мне нужно прочитать данные из io::stdin и напрямую записать их в TcpStream. Точно так же мне нужно прочитать данные из TcpStream и напрямую записать их в io::stdout. Под «напрямую» я имею в виду, что мне не нужно, чтобы все эти данные записывались в память.

Я думаю, что io::copy - это функция, которая мне нужна для подключения читателей к писателям таким образом .

Однако мне интересно, будет ли хорошей практикой buffer оба конца потоков подключены к io::copy:

  • Это хорошо, потому что ограничивает количество системных вызовов, необходимых для передачи всех данных, верно?
  • Это плохо, потому что для передачи требуется больше копий данных, , то есть stdin -> BufReader -> BufWrite -> TcpStream вместо stdin -> TcpStream, и наоборот TcpStream -> BufRead -> BufWrite -> stdout вместо TcpStream -> stdout, это тоже правильно?

Какой здесь компромисс? Стоит ли буферизовать конец потоков, к которым присоединяется io::copy или нет?
Как это зависит от объема данных, в сети или в системе?

...