Производительность / приоритет в потоке Boost с помощью accept () (Linux) - PullRequest
2 голосов
/ 18 июля 2011

Я реализовал класс C ++, который запускает отдельный поток, принимающий соединения (с boost::asio).Весь класс предназначен для того, чтобы быть асинхронным «приемником команд» для более крупной программы.

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

Ответы [ 2 ]

3 голосов
/ 18 июля 2011

если вы или используемый вами класс выполняете вызов accept, то поток блокируется и ожидает, пока ОС выполнит некоторые действия.Таким образом, поток (не должен) не потреблять ресурсы ЦП, если он это делает, это либо

  • в системном вызове (ничего изменить нельзя), либо
  • тайм-аут, и поток снова возвращается к accept.Если есть какой-либо параметр, чтобы изменить это, попробуйте!
1 голос
/ 18 июля 2011

Предполагая, что вы используете класс потока Boost, вы можете изменить приоритеты потока с помощью функции handle native_handle () в потоке Boost. Здесь - небольшой пример.

Но сначала я бы посоветовал вам убедиться, что у вас действительно есть проблема. Поток, который вас волнует, в любом случае должен быть фактически свободен.

...