Разъем и буферы - PullRequest
       11

Разъем и буферы

1 голос
/ 09 октября 2011

Я знаю, что стандартные функции библиотеки c fwrite и fread являются оболочками буферизации сортировки системных вызовов write и read, буферы используются по соображениям производительности, которые я полностью понимаю. Чего я не понимаю, так это роли буферов в функциях программирования сокетов записи и чтения. Можете ли вы помочь мне понять, для чего они используются, выделив различия и сходства с помощью файловых буферов?

Я новичок в программировании сокетов ...

Ответы [ 2 ]

3 голосов
/ 09 октября 2011

Когда ядро ​​получает пакеты, оно должно куда-то поместить эти данные.Он хранит его в буфере.Когда ваше приложение выполняет следующее чтение, оно может извлечь данные из этих буферов.Если у вас есть UDP-соединение, и ваше приложение не читает эти буферы, оно заполняется, и ядро ​​начинает отбрасывать полученные пакеты.Если у вас есть соединение TCP, оно будет подтверждать пакеты, пока в буферах есть свободное место, но после этого оно будет сигнализировать, что не может читать больше.ограниченный ресурс, ядро ​​обычно не может немедленно отправить пакет.Если вы делаете большую запись (), она может быть нарезана до сотен пакетов.Таким образом, ядро ​​будет хранить эти данные в буферах.Буфер также хорошо работает, если вы делаете много мелких записей, см. Алгоритм Нэгла .

2 голосов
/ 09 октября 2011

Представьте себе, если вы отправили информацию по одному байту за раз.Вы будете генерировать 100-байтовый пакет для отправки 1 байта, и, если это TCP-соединение, в зависимости от реализации, ждете, пока не получите syn / ack, прежде чем отправлять больше?Для меня это звучит довольно неэффективно.

Вместо этого вы используете буфер для хранения большого количества данных и отправки их в одном пакете, точно так же, как для сохранения данных перед записью на диск.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...