Существует ли «оптимальный» размер буфера при использовании send ()? - PullRequest
3 голосов
/ 10 февраля 2011

Допустим, вы передаете файл произвольной длины порциями по TCP / IP:

looping...
    read(buffer, LENGTH)
    send(mysocket, buffer, LENGTH, flags)

Мой вопрос: какова была бы оптимальная величина ДЛИНЫ? Или это вообще не имеет значения? Я видел все: от 256 до 8192 байт.

Ответы [ 3 ]

2 голосов
/ 10 февраля 2011

Зависит от того, что вы подразумеваете под оптимальным. Для оптимального использования полосы пропускания вы хотите максимизировать размер пакета, поэтому отправьте как минимум размер сетевого пакета (который в Ethernet обычно составляет около 1500 байт). Если вы читаете с диска 4096 или 8192 байта, будет хорошим значением.

0 голосов
/ 04 апреля 2017

Если вы отправляете большие объемы данных через соединение с высокой задержкой, вы можете получить лучшую пропускную способность с большим буфером отправки.Вот хорошее объяснение: http://www.onlamp.com/pub/a/onlamp/2005/11/17/tcp_tuning.html

0 голосов
/ 10 февраля 2011

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

ATM довел это до крайности с 54-байтовым пакетом.

Но, в зависимости от вашей библиотеки, она может самостоятельно выполнять некоторую буферизацию и устанавливать размер пакета независимо.YMMV.

...