2013-02-09 2 views
0

У меня есть программа, которая регистрирует состояния переключателей по UDP. Мне нужно, чтобы функция ведения журнала была как можно быстрее, но знайте, что сетевое взаимодействие считается медленным. Есть ли какое-либо преимущество для отправки данных UDP из отдельного потока или для отправки UDP просто быстрого вызова, поскольку ничего не нужно настраивать или ждать (если я предварительно открыл сокет)?
Я в порядке с ним, если он немедленно возвращается, но если он внутренне ожидает какой-либо ресурс ввода-вывода, это может быть проблемой. Имеет ли это?Отправлять UDP из отдельной темы

+1

платформа? Linux или Windows или другое? – Eric

+0

@ Эрик Оба, но главный - это Windows. Это имеет значение, или это просто общий «вы всегда должны упоминать о платформе»? – baruch

+0

@baruch: Сокеты различаются между Windows и POSIX. Общий ответ «блокирует ли он»? может быть одинаковым для обеих платформ, но код для предотвращения этого может отличаться. – icktoofay

ответ

1

Если вы не отправляете огромные суммы [и я имею в виду мегабайты каждую минуту] данных [или очень часто] (сотни пакетов каждую минуту), я бы ожидал, что (или write) будет достаточно быстрым.

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

Как и все, что связано с производительностью, всегда лучше измерять, чем спрашивать в Интернете ... Я бы ожидал, что на современном ПК вызов sendmsg составляет порядка нескольких сотен наносекунд для небольшой пакет и около одной дополнительной наносекунды на 8 байтов, если пакет имеет более нескольких десятков байтов, до размеров в несколько килобайт. Когда вы добираетесь до сотен килобайтов, время увеличивается в 3-10 раз.

Смежные вопросы