等待线程还会占用cpu时间吗?

时间:2013-11-22 23:49:31

标签: multithreading game-engine

我正在尝试为游戏引擎创建一个线程池,我一直在考虑我的系统应该如何对产生自己线程的第三方库做出反应。

根据我的阅读,理想的情况是每个可以访问的CPU只有一个线程。因此,如果我的第三方物理更新产生四个线程,那么在线程池运行时关闭线程池中的四个线程是理想的,然后将它们重新打开,这样多个线程永远不会在一个CPU上竞争。

我的问题是关于条件变量等功能背后的基础机制。由于产生线程很昂贵,有四个线程在条件变量上等待,然后在物理完成时通知它们似乎比加入四个线程并在之后重新生成它们更好。但是,如果他们正在等待一个变量,那么线程是真的“睡着了”还是他们仍然在后台争夺CPU资源?

2 个答案:

答案 0 :(得分:1)

虽然您没有编写正在编程的平台,但在大多数实现中,等待的线程几乎不消耗CPU资源。

然而,它们会使用一些内存(以保存堆栈等),因此您应该避免产生过多的线程并尝试尽可能多地重用它们,因为正如您所指出的,产生一个新线程是一个在大多数平台上进行昂贵的操作。

即使您没有提供大量信息,我猜测在您的场景中让线程等待是一个更好的选择,因为少数线程不会使用大量资源并且可能不得不生成新线程经常会在几乎所有平台上严重影响性能。

答案 1 :(得分:0)

任何好的第三方库都应该允许您通过线程池运行它的工作,以避免出现这个问题。

例如,这里有关于如何使用PhysX - https://developer.nvidia.com/sites/default/files/akamai/physx/Docs/TaskManager.html

执行此操作的文档