Установите более высокий приоритет для потока boost :: asio относительно процесса - PullRequest
3 голосов
/ 18 июня 2020

Я знаю, что в C ++ есть несколько способов установить приоритет потоков. Что-то вроде обсуждаемого здесь . Есть ли что-то подобное в потоках, выполняемых boost::asio? Я выполняю async_read и async_write для чтения и записи данных из сети.

Обратите внимание, что я хочу установить приоритет между чтением и записью, как описано здесь в boost :: asio, пример . Я предпочитаю установить более высокий приоритет для потока чтения asio по отношению ко всему процессу.

Если boost::asio не предоставляет прямой механизм для повышения приоритета его потока (ов), то это Возможно, я создам std::thread, установлю для него более высокий приоритет, как описано здесь здесь , и предоставлю его asio для использования его для async_read / async_write? Или это возможно с помощью нити?

Среда:
Я использую boost 1.68 с компилятором C ++ 11.

1 Ответ

1 голос
/ 18 июня 2020

Я вместе с комментаторами, которые сомневаются, что это будет полезно.

Но отвечу на ваш вопрос: не существует такой вещи, как поток Boost Asio.

Почему? :

Threads And Boost Asio

Следовательно, создание и управление всеми потоками, в которые будут доставляться уведомления, является обязанностью пользователя библиотеки.

Причины этого подхода включают:

  • Вызывая io_context::run() только из одного потока, код пользователя может избежать сложности разработки, связанной с синхронизацией. Например, пользователь библиотеки может реализовать масштабируемые серверы, которые являются однопоточными (с точки зрения пользователя).
  • Пользователю библиотеки может потребоваться выполнить инициализацию в потоке вскоре после запуска потока и перед любым другим код приложения выполняется. Например, пользователи COM от Microsoft должны вызвать CoInitializeEx перед тем, как любые другие COM-операции могут быть вызваны из этого потока.
  • Интерфейс библиотеки отделен от интерфейсов для создания потоков и управления ими, и разрешает реализацию на платформах, где потоки недоступны.

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

...