Проблемы, связанные с TCP/IP
Некоторые методы программирования могут столкнуться с проблемами производительности, связанными с реализацией TCP/IP. Такие проблемы с производительностью не свидетельствуют о том, что TCP/IP является неэффективным или узким местом производительности; скорее, эти проблемы возникают, когда операции TCP/IP не понятны.
Следующие проблемы определяют распространенные сценарии, в которых сочетание операций TCP/IP и вариантов разработки сетевых приложений приводит к снижению производительности.
Приложения с интенсивным подключением.
Некоторые приложения создают экземпляры нового TCP-подключения для каждой транзакции. Установка TCP-подключения занимает время, вносит дополнительные rtt и может быть медленным запуском. Кроме того, для закрытых подключений распространяется действие TIME-WAIT, которое потребляет системные ресурсы.
Приложения с высокой интенсивностью подключения часто используются в основном потому, что их легко создавать; тестирование и обработка ошибок очень просты. Обнаружение ошибок в постоянном подключении может потребовать значительных усилий и кода, поэтому иногда не завершается.
Управите эту ситуацию, повторно имитируя TCP-подключение. Это может привести к сериализации через TCP-подключение, если транзакции не мультиплексируются через несколько подключений. Если используется такой подход, количество подключений должно быть ограничено двумя, а также требуется обрамления на уровне приложения и расширенная обработка ошибок.
Буферы отправки нулевой длины и блокирующие отправки.
Отключение буферизации с помощью функции setsockopt для установки нулевого буфера отправки (SO_SNDBUF) аналогично отключению кэширования диска. При установке нулевого буфера отправки и отправке блокирующих отправлений приложение имеет вероятность достижения отложенного подтверждения в 200 миллисекунд.
Не отключайте буферизацию отправки, если вы не учтете это влияние во всех сетевых средах. Одно исключение: потоковая передача данных с помощью перекрывающихся операций ввода-вывода должна задать для буфера отправки нулевое значение.
Модель программирования отправки, отправки и получения.
Структурирование приложения для выполнения операций отправки и отправки и получения увеличивает вероятность возникновения алгоритма Нейгла, что приводит к задержке в rtt+200 мс. Алгоритм Nagle может быть обнаружен, если последняя отправка меньше максимального размера сегмента TCP (MSS, максимальный объем данных в одной датаграмме). MSS может быть очень большим значением (64 КБ в IPv4 и даже больше в IPv6), поэтому не рассчитывайте на обычно небольшой MSS. Лучшим вариантом является объединение двух отправлений в одну отправку с помощью функции WSASend или memcpy .
Большое количество одновременных подключений.
Количество одновременных подключений не должно превышать два, за исключением приложений специального назначения. Превышение двух одновременных подключений приводит к трате ресурсов. Хорошим правилом является использование до четырех кратковременных подключений или двух постоянных подключений на место назначения.
Связанные темы