从执行boost :: fibers

时间:2019-07-08 13:13:31

标签: c++ multithreading boost boost-fiber

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

我要实现的目标:

我的主线程知道何时激活和运行哪根光纤以及何时收集执行光纤后提供的未来。 由于我的软件在具有100多个核心的高度并行环境中运行,因此,如果可能,我将启动尽可能多的工作线程。工作线程应运行诸如boost::fibers::algo::work_stealing之类的光纤调度程序。因此,它们应该执行我的主线程产生的所有纤维。

出了什么问题

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

可能的,幼稚的解决方案: 即使我不知道如何正确解决问题,我还是会考虑一些可能性。

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

由于我在boost::fibers库中刚刚起步,所以我想知道实现目标的最佳方法是什么?

致谢,谢谢您的帮助!

0 个答案:

没有答案