Я в настоящее время нахожусь в процессе профилирования производительности. У нас есть основное клиент-серверное приложение. Скорость передачи TCP отличалась бы, если бы я выполнил клиент/сервер на той же машине (localhost) по сравнению с через два компьютера на LAN?
Скорость передачи данных по TCP будет выше, потому что если вы запустите его на том же компьютере, он будет пересылать пакеты локально, даже не затрагивая LAN и сетевой адаптер.
Но общая скорость клиент+сервер может быть лучше на разных машинах, особенно если вы не слишком часто общаетесь с сервером.
Да, определенно, задержка отправки по сети замедлит работу программы. Пропускная способность не изменилась бы, но если вы ждете ответов перед отправкой данных, она увеличивается из-за дополнительной задержки.
При использовании localhost локальные ресурсы с большей вероятностью будут узким местом производительности из-за памяти, диска, процессора и т. Д. При использовании двух компьютеров более вероятно сеть будет узким местом из-за задержки, пропускной способности, потери пакетов и т. д.
Это зависит от того, что делает ваше приложение и как оно использует сеть, клиента и сервер.
Это действительно зависит от того, что делает ваше приложение ....
В качестве примера: Если оно передает файлы размером 10 ГБ от клиента к server, тогда да, это будет иметь значение.
Я не знаю, можно ли это измерить (это также зависит от скорости вашей локальной сети), но с логической точки зрения, конечно, разница есть. Localhost всегда будет самым быстрым, поскольку данные не передаются через другую среду (например, воздух или медный провод).
Но в зависимости от того, что делает ваше приложение, это может иметь или не иметь значения.
Время передачи почти наверняка было бы быстрее, если бы клиент и сервер находились на одной машине. На самом деле это может не иметь значения для производительности вашей программы в целом, в зависимости от других ресурсов, потребляемых клиентом и сервером.
Я только что столкнулся с этой проблемой в проекте на работе. Использование UDP с локальным хостом как минимум на порядок быстрее, чем через сетевое соединение (может быть, на два порядка), и я считаю, что для локального хоста нет потолка MTU в 1500, который обычно существует для сетевых портов.
Одно неподтвержденное подозрение заключается в том, что встроенные сетевые порты на ПК не все одинакового качества, поэтому, даже если они заявлены как гигабитные, вы не сможете работать так быстро. Но это также может быть большое количество системных вызовов Windows (один вызов ОС на пакет), что может привести к значительным накладным расходам. С TCP я могу передать ОС большой кусок данных для записи за один вызов. С UDP я должен передавать ему пакет за раз, ограниченный размером MTU, что приводит к гораздо большему количеству вызовов ОС. Но пока не подтверждено.
Linux еще не пробовал.