首页 > 解决方案 > 从执行 boost::fibers 中排除一个线程

问题描述

我正在创建一个多线程程序,boost::fibers它在执行实际执行繁重的代码时高度依赖。

我想要达到的目标:

我的主线程知道何时激活和运行哪个纤程以及何时收集纤程执行后提供的未来。由于我的软件在具有 100 多个内核的高度并行环境中运行,因此我会尽可能多地启动工作线程。工作线程应该运行一个纤程调度器,例如boost::fibers::algo::work_stealing. 因此他们应该执行我的主线程产生的所有纤维。

有什么问题:

由于我的主线程非常忙于为 100 多个工作线程创建和计时所有纤程,因此我想避免主线程加入任何纤程的执行。这意味着,我的主线程应该只关心启动纤程并在它们完成执行后收集它们的未来。 但是,我也不知道如何将我的主要光纤排除在执行光纤之外。

可能的、幼稚的解决方案: 尽管我不知道如何正确解决我的问题,但我想了一些可能性。

  1. 创建我自己的光纤调度器:调度器是boost::fibers. 因此,可能会编写一个自定义调度程序,该调度程序将主线程排除在执行之外。
  2. 使用 aboost::fibers::buffered_channel在线程之间传输任务:但是,如果这是一个好的解决方案,我不这样做,因为这消除了使用光纤调度程序的巨大可能性。
  3. 其他我还不知道的好方法:我想可能有另一种简单的方法来排除创建纤维的主线程,参与执行调度boost::fibers

由于我是boost::fibers图书馆的新手,我想知道实现目标的最佳方法是什么?

问候并感谢您的帮助!

标签: c++multithreadingboostboost-fiber

解决方案


推荐阅读