我的应用程序目前有一个“任务”列表(每个任务都包含一个函数 - 该函数可以像打印一样简单,但也可以更复杂),它可以循环使用。 (附加说明:大多数任务在执行后发送数据包)由于其中一些任务可能需要一段时间,因此我考虑为每个任务使用不同的异步线程,从而允许同时运行所有任务。
这样做是否聪明?
一个问题是我不可能事先知道任务量,因此可能会导致创建相当多的线程,并且我读了在某个地方,每个不同的硬件都有它的局限性。我正计划在覆盆子pi上运行我的应用程序,我认为我总是需要运行5到20个任务。
此外,某些任务的“优先级”低于其他任务。
我应该先执行重要任务,然后再运行不太重要的任务吗? (这里的问题是,如果所有任务一起所需的时间总和超过了应该运行某个特定的重要任务的时间,那么我的应用程序将不再准确)或者在异步线程中实现所有内容?或者只是尝试通过在异步线程中进行“数据包发送”来使一切变得更快,从而不必等到数据包实际发送?
答案 0 :(得分:1)
在合理设计解决方案之前,您需要先问自己一些问题。
您是否希望限制并发任务的数量?
将来有可能以你今天无法预测的方式增加并发任务的数量吗?
......可能还有很多。
如果对这些中的任何一个的回答是"是"那你有几个选择:
生成器/消费者队列,其中有一定数量的线程耗尽队列(不推荐恕我直言)
将您的任务编写为事件调度程序(例如boost::io_service
)周围的异步状态机(这样可扩展性更强)。
如果您知道它只会是20个并发任务,那么您可能会使用std::async
,但这是编写代码的一种草率方式。