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

Multithreading 等待的线程还会占用cpu时间吗?,multithreading,game-engine,Multithreading,Game Engine,我正在尝试为游戏引擎创建一个线程池,我一直在考虑我的系统应该如何应对产生自己线程的第三方库 从我所读到的内容来看,每个CPU只有一个线程是非常理想的。因此,如果我的第三方物理更新生成了四个线程,那么在线程池运行时最好关闭四个线程,然后再打开它们,这样多个线程就不会在一个CPU上争用 我的问题是关于功能背后的基本机制,比如条件变量。由于生成线程的成本很高,因此让四个线程等待一个条件变量,然后在物理完成时通知它们似乎比加入四个线程然后重新生成它们要好得多。但是,如果线程正在等待一个变量,那么它们是真

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

从我所读到的内容来看,每个CPU只有一个线程是非常理想的。因此,如果我的第三方物理更新生成了四个线程,那么在线程池运行时最好关闭四个线程,然后再打开它们,这样多个线程就不会在一个CPU上争用


我的问题是关于功能背后的基本机制,比如条件变量。由于生成线程的成本很高,因此让四个线程等待一个条件变量,然后在物理完成时通知它们似乎比加入四个线程然后重新生成它们要好得多。但是,如果线程正在等待一个变量,那么它们是真的在“休眠”还是仍然在后台争夺CPU资源呢?

尽管您没有编写要在哪个平台上编程,但在大多数实现中,等待的线程几乎不消耗CPU资源

但是,它们确实使用了一些内存(用于保存堆栈等),因此您应该避免生成过多的线程,并尽可能多地重用它们,因为正如您所指出的,在大多数平台上生成新线程是一项昂贵的操作


尽管您没有提供很多信息,但我猜在您的场景中,让线程等待是一个更好的选择,由于少量线程不会占用大量资源,并且可能必须频繁生成新线程,这将严重影响几乎所有平台上的性能。

任何好的第三方库都应该让您选择通过线程池运行它的工作,以从一开始就避免该问题


例如,这里的文档说明了如何使用PhysX实现这一点-

您使用的是什么语言编程?