увеличить размер буфера asio async_receive

Существует ли оптимальный размер буфера, который я передаю в async_receive или async_receive_from для tcp и udp соответственно? Я думал, что это может быть 8192 для tcp и 1472 для udp.


person David    schedule 25.10.2011    source источник


Ответы (1)


AFAIK, нет, вам нужно понять требования к пропускной способности для вашего приложения и установить его соответствующим образом.

person Nim    schedule 25.10.2011
comment
В чем преимущество большого буфера - разве размеры, которые я указал, не относятся к некоторому уровню сокета? У меня сложилось впечатление, что ASIO просто заполнит размер моего буфера от нескольких приемов, но на самом деле это не помогает/не меняет пропускную способность. - person David; 25.10.2011
comment
Вы можете установить буферы сокетов rx и tx, обычно они должны быть установлены на довольно большое значение, чтобы предотвратить падение. Размер буфера, который вы предоставляете asio, не зависит от этого. Скажем, ваше приложение отправляет сериализованный буфер размером 2 КБ по UDP, он будет фрагментирован и отправлен, если вы предоставите asio только 1,5 КБ буфера, вы получите только столько данных, и вам придется выполнить еще одно чтение, чтобы получить отдыхать. Как видите, это очень сильно зависит от приложения. - person Nim; 25.10.2011
comment
Я думаю, что ваше первое предложение, возможно, то, что я искал. Меня не беспокоит использование asio (моя оболочка постоянно связывает async_receive) — меня беспокоит производительность и оптимальное использование памяти на уровне сокета. Если какой-то внутренний буфер tcp равен 8 КБ, то предоставление asio буфера 32 КБ было бы бессмысленным. - person David; 25.10.2011
comment
TBH, вы должны сначала подтвердить настройки по умолчанию, они могут быть уже достаточно большими, и вам, возможно, не нужно устанавливать их вручную в вашем приложении. - person Nim; 25.10.2011