gpt4 book ai didi

c++ - 每个任务一个异步线程?

转载 作者:行者123 更新时间:2023-11-28 06:01:34 24 4
gpt4 key购买 nike

我的应用程序目前有一个循环执行的“任务”列表(每个任务都包含一个函数——该函数可以像打印一些东西一样简单,但也可以更复杂)。 (附加说明:大多数任务在执行后发送一个数据包)由于其中一些任务可能需要相当长的时间,我考虑为每个任务使用不同的异步线程,从而让所有任务并发运行。
这样做是否明智?
一个问题是我不可能事先知道任务的数量,所以它可能会导致创建相当多的线程,我读到每个不同的硬件都有其局限性的地方。我打算在树莓派上运行我的应用程序,我认为我总是需要运行 5 到 20 个任务。

此外,一些任务的运行“优先级”低于其他任务。

我应该先运行重要的任务,然后运行次要的任务吗? (这里的问题是,如果所有任务所需的时间总和超过了某些特定的、重要的任务应该运行的时间,我的应用程序将不再准确)或者在异步线程中实现所有内容?或者只是尝试通过在异步线程中进行“数据包发送”来使一切变得更快,而不必等到数据包实际发送?

最佳答案

在合理设计解决方案之前,您需要问自己很多问题。

  1. 是否要限制并发任务数?

  2. future 并发任务的数量是否有可能以您今天无法预测的方式增加?

...可能还有更多。

如果其中任何一个的答案是"is",那么您有几个选择:

  • 生产者/消费者队列,具有固定数量的线程排空队列(不推荐恕我直言)

  • 围绕诸如 boost::io_service 之类的事件调度程序将您的任务编写为异步状态机(这更具可扩展性)。

如果您知道只有 20 个并发任务,您可能会使用 std::async,但这是一种草率的代码编写方式。

关于c++ - 每个任务一个异步线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33185830/

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