gpt4 book ai didi

c++ - 在多线程游戏中每帧都创建新的工作线程不好吗?

转载 作者:太空宇宙 更新时间:2023-11-04 12:56:01 25 4
gpt4 key购买 nike

我一直在尝试使用多线程游戏引擎。为了举例,这里是我的代码的基本结构。

#include <thread>

int main() {

std::thread physics_thread;
std::thread particles_thread;
std::thread graphics_thread;

while (!shouldClose) {

physics_thread = thread(doPhysics, &someData1);
particles_thread = thread(doParticles, &someData2);
graphics_thread = thread(doGraphics, &someData3);

physics_thread.join();
particles_thread.join();
graphics_thread.join();

}

}

这是非常糟糕的做法吗?我在一个相当低功耗的系统上运行 linux,每次更新都创建这些线程非常便宜。不过,就所有平台而言,这只是个坏主意吗?

附带说明一下,我尝试使用互斥锁和条件变量不断运行工作线程,有时我可以让它工作,但对于我想要实现的目标来说,这似乎非常复杂。

最佳答案

虽然这看起来很便宜,但事实并非如此。线程需要一些繁重的工作,如果您知道您将再次需要它们(更不用说多次重用它们),您应该尽量避免它。

经典的解决方案是使用线程池在您需要时立即执行您的任务,然后让工作人员休眠直到下一次。

拥有 N 个额外的 sleep 线程的成本是最小的,不会影响应用程序的性能。

这是一个简单但非常强大的单一标题 thread pool library我写了。

关于c++ - 在多线程游戏中每帧都创建新的工作线程不好吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46636828/

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