Откуда в сокетах python берется значение 4096

Возник такой вопрос в python в библиотеки socket рекомендованное значение для функции получения данных recv 4096 байт.

Я не очень понимаю, чем обоснованно данное значение и откуда оно вообще берется. В документации по этому сказано очень скупо:

Note: For best match with hardware and network realities, the value of bufsize should be a relatively small power of 2, for example, 4096.

И казалось бы, следует копать в аппаратную сторону, но например MTU Ethernet-кадров составляет 1500 байт, ограничение для TCP/UDP чуть меньше 2^16.


Ответы (1 шт):

Автор решения: eri

Значение буфера — это объем информации, который сервер прочитал откуда-то, но ещё недоставленный до потребителя, плюс запас на время, пока программа запросит следующую порцию.

Например, если время реакции сервера 100мс, время обработки на клиенте 50мс, а данные поступают 1024 в секунду, то буфер нужен 512, чтоб эти данные поступали непрерывно при синхронном обмене (игры). При этом желательно, чтоб сообщение помещалось в буфер, чтобы за цикл это сообщение можно было обработать.

Если буфер ещё больше, то несколько сообщений обрабатываются за раз. Но слишком большой буфер не даст подстроиться под лаги интернета, и вы поймёте, что подключение упало и нужно переподключиться, когда будет уже заметно потребителю.

→ Ссылка