我有一个用于游戏引擎的 2D 粒子系统,我想在其中将粒子的更新循环与主线程分离。我正在使用一个用 boost::asio 实现的线程池,并将所有任务分成几个阶段,然后在主线程上组合结果。这对我来说效果很好,并保证了我允许池的总线程数(由独立触发自己任务的所有粒子发射器共享)。
我已经阅读了很多讨论 std::async 和 std::future 的文章。这在 Windows 或 linux 类型的系统上似乎是完全合理的,其中线程创建由操作系统很好地管理并且内存是丰富的。但似乎很少有人关注在移动平台上讨论这类事情,因为在这种情况下,线程创建可能很昂贵。因为我不确定在这些平台上可能会创建多少线程,所以在我不知道在给定时间可能有多少异步调用(如果每个都创建自己的)的上下文中,似乎很难依赖 std::async线)。
我想听听具有多线程 C++ 移动开发经验的个人的意见。我的问题总结是这样的:
如果我创建 20 个粒子效果,每个都有 4 个并发异步任务,这会导致 100 个线程每个占用 0.5 mb 的内存吗?还是 async 对线程创建和任务共享的智能化有一些神奇的支持?
或者,异步是否会使主线程陷入困境(如果没有明确地使用线程创建规则)有效地滞后于我的游戏玩法以获得相对低优先级的粒子效果?
如果是这样,什么上下文在移动设备上实际上是有用的,因为看起来线程创建是您希望在这些设备上更明确一点的东西。