У меня есть программа, которая регистрирует состояния переключателей по UDP. Мне нужно, чтобы функция ведения журнала была как можно быстрее, но знайте, что сетевое взаимодействие считается медленным. Есть ли какое-либо преимущество для отправки данных UDP из отдельного потока или для отправки UDP просто быстрого вызова, поскольку ничего не нужно настраивать или ждать (если я предварительно открыл сокет)?
Я в порядке с ним, если он немедленно возвращается, но если он внутренне ожидает какой-либо ресурс ввода-вывода, это может быть проблемой. Имеет ли это?Отправлять UDP из отдельной темы
ответ
Если вы не отправляете огромные суммы [и я имею в виду мегабайты каждую минуту] данных [или очень часто] (сотни пакетов каждую минуту), я бы ожидал, что (или write
) будет достаточно быстрым.
Единственная причина, по которой потребовалось бы много времени, - это то, что вы загружаете больше данных, чем может потребоваться сеть, поэтому ядро должно ждать, пока свободный буферный слот станет доступным.
Как и все, что связано с производительностью, всегда лучше измерять, чем спрашивать в Интернете ... Я бы ожидал, что на современном ПК вызов sendmsg
составляет порядка нескольких сотен наносекунд для небольшой пакет и около одной дополнительной наносекунды на 8 байтов, если пакет имеет более нескольких десятков байтов, до размеров в несколько килобайт. Когда вы добираетесь до сотен килобайтов, время увеличивается в 3-10 раз.
Это может быть. Чтобы предотвратить его ожидание, просто установите сокет неблокирующим.
Возможно, вас интересует how Python sets the appropriate flag.
- 1. Отправлять данные из отдельной темы в сервисе для обслуживания Class
- 2. Начальная деятельность из отдельной темы?
- 3. Нарисовать изображение на форме из отдельной темы
- 4. iPhone Gameloop визуализирует обновление из отдельной темы
- 5. Ничья из отдельной темы с NSOpenGLLayer
- 6. Загрузить XML/Изображение из отдельной темы
- 7. Создание сообщения Toast из отдельной темы
- 8. Настройка Свойства управления из отдельной темы/класса
- 9. Многоадресная рассылка через UDP из другой темы
- 10. Эффективно отправлять поток UDP-пакетов
- 11. Syncronous Scala Будущее без отдельной темы
- 12. Отправка запроса с использованием отдельной темы
- 13. Запрос на создание отдельной темы в java?
- 14. Изменение метки WPF mainwindow из другого класса и отдельной темы
- 15. Завершить программу из отдельной темы в Objective-C?
- 16. Form.Owner набор из отдельной темы в .NET 3.5
- 17. отправлять UDP-пакеты через LTE с Android
- 18. Настройка темы «Атласборд» для отдельной приборной панели
- 19. wix Managed Bootstrapper: Engine.EvaluateCondition() требует отдельной темы?
- 20. Запуск отдельной темы в среде WSGI
- 21. Как отправлять потоки MPEGTS по UDP
- 22. отправлять данные из raw socket в udp или tcp socket
- 23. Отправлять файлы после перфорации отверстий udp
- 24. Android UDP не может отправлять или получать
- 25. Отправлять UDP-пакеты узлу в другой сети
- 26. C++ отправлять данные в несколько UDP-сокетов
- 27. UDP отправлять и получать в разных потоках
- 28. Отправлять данные UDP всем на LAN Android
- 29. Отправлять пакет UDP на локальный порт
- 30. Отправлять и получать UDP с веб-страницы
платформа? Linux или Windows или другое? – Eric
@ Эрик Оба, но главный - это Windows. Это имеет значение, или это просто общий «вы всегда должны упоминать о платформе»? – baruch
@baruch: Сокеты различаются между Windows и POSIX. Общий ответ «блокирует ли он»? может быть одинаковым для обеих платформ, но код для предотвращения этого может отличаться. – icktoofay