У меня есть требование, при котором серверу необходимо взаимодействовать с двумя клиентами, один из которых находится на локальной машине, а другой - на удаленном.Является ли AF_INET медленнее AF_UNIX из-за трехстороннего дрожания, связанного с AF_INET?
Итак, изначально я думал о создании сокета с использованием AF_UNIX для связи с локальным клиентом (с его быстрее, чем AF_INET) и AF_INET в случае связи с удаленным и опроса между ними.
Но в случае локального клиента канал будет создан только в начале, который будет существовать постоянно до тех пор, пока сервер не будет запущен, то есть один прием, а затем несколько операций чтения/записи.
Итак, могу ли я заменить этот AF_UNIX на AF_INET, так как установление соединения будет выполняться только один раз? Где работает производительность в случае AF_INET? Это в трехстороннем рукопожатии или где-то еще?
В тесте с чистой пропускной способностью, где я пытался использовать самую большую запись и читал, чтобы засунуть столько данных, которые могли бы быть доступны по трубе, я получил сопоставимые показатели производительности. У AF_UNIX было небольшое преимущество, но ничего серьезного. И AF_UNIX последовательно передает в 4 раза больше данных за системный вызов. Производительность AF_UNIX также была намного более переменной, и я думаю, что она намного более чувствительна к планировщику. ядро-4.11 на недавнем Dell XPS 13. – Omnifarious
Я не тестировал, как быстро было инициировать соединение в первую очередь. Просто прямая пропускная способность ввода-вывода. – Omnifarious