boost 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, не зависи от това. Да кажем, че вашето приложение изпраща сериализиран буфер от 2K през UDP, това ще бъде фрагментирано и изпратено, ако предоставите само буфера от 1,5K на asio, ще получите само толкова много данни и ще трябва да направите друго четене, за да получите Почивка. Както можете да видите, това е много зависимо от приложението. - person Nim; 25.10.2011
comment
Мисля, че първото ти изречение е може би това, което търсех. Не се притеснявам от използването на asio (моята обвивка непрекъснато свързва async_receive) - притеснявам се за производителността и оптималното използване на паметта на ниво сокет. Ако някакъв вътрешен tcp буфер е 8k, тогава даването на asio на 32k буфер би било безсмислено. - person David; 25.10.2011
comment
TBH, първо трябва да потвърдите настройките по подразбиране, те може вече да са достатъчно големи и може да не е необходимо да ги задавате ръчно в приложението си. - person Nim; 25.10.2011