【发布时间】:2015-10-08 23:22:51
【问题描述】:
假设我有许多用 boost::statechart 定义的异步状态机。运行多个异步状态机的明确记录的机制是将它们中的一个或多个固定到一个线程。但是,出于我的目的,我需要运行很多很多异步状态机,而每个线程一个是不行的。此外,任何给定状态机完成的工作量都是不可预测的,因此将状态机分配给固定线程会导致不平衡。
相反,我希望有一个线程池,其中空闲线程可以从队列中提取一些工作量。这里需要注意,以便按顺序传递给定状态机的事件。大概开始的地方是涉及实现调度程序和可能的 FifoWorker 概念来做我想做的事情,分别作为 fifo_scheduler 和 fifo_worker 类的替代品。但是,我想知道这个问题是否已经被其他人解决了,或者我只是问错了问题。
【问题讨论】:
-
由于异步状态图经验不足,这个组合目前不在我的范围内。但一定要看看 Boost Asio。
-
是的,线程池对于 boost::asio 来说几乎是微不足道的,而且我已经弄清楚如何确保事件按顺序传递。但是,我不知道如何将它与 boost::statechart 结合起来。如果我不能在这里得到答案,我将不得不权衡尝试弄清楚如何自己实现上述概念与滚动我自己的状态机东西。
标签: c++ multithreading asynchronous boost