Исключение одного потока из выполнения boost :: fiber - PullRequest
1 голос
/ 08 июля 2019

Я создаю многопоточную программу, которая активно использует boost::fibers, когда дело доходит до фактического выполнения тяжелого кода.

Чего я хочу достичь:

Мой основной поток знает, когда активировать и запускать какое волокно, а когда собирать будущее, предоставленное после выполнения оптоволокна. Поскольку мое программное обеспечение работает в высокопараллельной среде с более чем 100 ядрами, я запускаю как можно больше рабочих потоков. Рабочие потоки должны запускать планировщик оптоволокна, например boost::fibers::algo::work_stealing. Поэтому они должны выполнять все волокна, которые производит моя основная нить.

В чем проблема:

Поскольку мой основной поток достаточно хорош для создания и синхронизации всех волокон для более чем 100 рабочих потоков, я хочу, чтобы основной поток не присоединялся к выполнению каких-либо волокон. Это означает, что моя основная нить должна заботиться только о том, чтобы начинать волокна и собирать их фьючерсы после их завершения. Однако я не знаю, как исключить и мое основное волокно из выполняемых волокон.

Возможные, наивные, решения: Несмотря на то, что я не знаю, как правильно решить мою проблему, я думаю о нескольких возможностях.

  1. Создание собственного оптоволоконного планировщика. Планировщик - это точка настройки boost::fibers. Следовательно, может существовать возможность записи обычного планировщика, который исключает основной шаг из исполнения.
  2. Используйте boost::fibers::buffered_channel для передачи задач между потоками. Однако я не знаю, если это хорошее решение, так как это исключает большие возможности использования планировщика волокна.
  3. Отличный способ, я еще не знаю: я думаю, что может быть другой, простой способ исключения основного потока, который создает волокна, от участия в планировании выполнения boost::fibers

Поскольку я довольно новичок в библиотеке boost::fibers, мне интересно, как лучше всего достичь своей цели?

С уважением и благодарностью за помощь!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...