Книга: UNIX: разработка сетевых приложений
Производительность
Производительность
Когда приложение вызывает функцию sendto
на неприсоединенном сокете UDP, ядра реализаций, происходящих от Беркли, временно соединяются с сокетом, отправляют дейтаграмму и затем отсоединяются от сокета [128, с. 762–763]. Таким образом, вызов функции sendto
для последовательной отправки двух дейтаграмм на неприсоединенном сокете включает следующие шесть шагов, выполняемых ядром:
? присоединение сокета;
? вывод первой дейтаграммы;
? отсоединение сокета;
? присоединение сокета;
? вывод второй дейтаграммы;
? отсоединение сокета.
ПРИМЕЧАНИЕ
Другой момент, который нужно учитывать, — количество поисков в таблице маршрутизации. Первое временное соединение производит поиск в таблице маршрутизации IP-адреса получателя и сохраняет (кэширует) эту информацию. Второе временное соединение отмечает, что адрес получателя совпадает с кэшированным адресом из таблицы маршрутизации (мы считаем, что обеим функциям sendto задан один и тот же получатель), и ему не нужно снова проводить поиск в таблице маршрутизации [128, с. 737–738].
Когда приложение знает, что оно будет отправлять множество дейтаграмм одному и тому же собеседнику, эффективнее будет присоединить сокет явно. Вызов функции connect
, за которым следуют два вызова функции write
, теперь будет включать следующие шаги, выполняемые ядром:
? присоединение сокета;
? вывод первой дейтаграммы;
? вывод второй дейтаграммы.
В этом случае ядро копирует структуру адреса сокета, содержащую IP-адрес получателя и порт, только один раз, а при двойном вызове функции sendto
копирование выполняется дважды. В [89] отмечается, что на временное присоединение отсоединенного сокета UDP приходится примерно треть стоимости каждой передачи UDP.
- Основные "рычаги" управления производительностью
- Улучшенная производительность
- Как сравнить производительность моего компьютера с остальными?
- Производительность и надежность
- Ситуация 5. Слабая производительность сети
- Производительность системных вызовов
- ГЛАВА 9 Влияние синхронизации на производительность и рекомендации по ее повышению
- Производительность программы
- Потоки и производительность
- Влияние синхронизации на производительность
- ГЛАВА 11 Производительность графического кода и пользовательского интерфейса
- Масштабируемость и производительность