gpt4 book ai didi

c++ - 如何使用 boost::statecart 在固定数量的线程上多路复用多个异步状态机?

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:16:26 26 4
gpt4 key购买 nike

假设我有许多用 boost::statecart 定义的异步状态机。运行多个异步状态机的明确记录机制是将其中一个或多个固定到一个线程。但是,出于我的目的,我需要运行很多很多异步状态机,而每个线程一个是行不通的。此外,任何给定状态机完成的工作量是不可预测的,因此将状态机分配给固定线程会导致不平衡。

相反,我想要一个线程池,空闲线程可以在其中从队列中提取一些工作量。这里需要注意一些事情,以便按顺序将事件传送到给定的状态机。大概开始的地方是涉及实现 Scheduler 和 FifoWorker 概念来做我想做的事情,分别作为 fifo_scheduler 和 fifo_worker 类的替代方案。但是,我想知道这个问题是否已经被其他人解决了,或者我只是问错了问题。

最佳答案

回答我自己的问题,现在我有时间考虑一下。这很简单:

  • 每个状态机都有自己的 fifo_scheduler
  • 当我们希望状态机开始运行时,一个函数被发送到线程池:
    1. 检查 scheduler.terminated() 并在是时停止。
    2. 运行调度程序(n),其中n 是一些依赖于实现的值。我们需要它来防止饥饿。
    3. 将自己发布回线程池。

这还可以确保事件按顺序交付,而无需诉诸其他方式。

这不是最好的答案,因为服务函数会占用队列中的空间,即使没有工作可做也会被调用。

关于c++ - 如何使用 boost::statecart 在固定数量的线程上多路复用多个异步状态机?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33027535/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com