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