multithreading - 等待线程仍会占用CPU时间吗?

标签 multithreading game-engine

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

根据我所读的内容,每个访问的CPU最好只有一个线程。因此,如果我的第三方物理更新生成了四个线程,则理想的是在运行时从我的线程池中关闭四个线程,然后再将它们重新打开,这样多个线程就不会争用一个CPU。

我的问题是关于条件变量等功能背后的潜在机制。由于产生线程的成本很高,因此有四个线程等待条件变量,然后在完成物理操作时通知它们,这比加入四个线程然后再产生它们要好得多。但是,如果它们正在等待变量,这些线程是否真的“处于 sleep 状态”?还是它们还在后台争用CPU资源?

最佳答案

尽管您没有编写要在哪个平台上进行编程,但是在大多数实现中,正在等待的线程消耗很少甚至没有CPU资源。

但是,它们确实会使用一些内存(以保存堆栈等),因此您应避免产生过多的线程并尝试尽可能多地重用它们,因为正如您所指出的那样,产生新的线程是一项昂贵的操作。大多数平台。

即使您没有提供很多信息,但我猜测在您的方案中,让线程等待是一个更好的选择,因为少数线程不会使用大量资源,并且可能不得不频繁地产生新线程几乎在所有平台上都会严重影响性能。

关于multithreading - 等待线程仍会占用CPU时间吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20156910/

相关文章:

c# - 返回 float 组时出现错误

multithreading - Hibernate 与 akka Actor 一起工作吗?

c++ - 线程安全并发调用C++中的外部命令

2d - 类似于 "Mario"的 2D 横向卷轴游戏中的碰撞 react

java - 如何在 LWJGL 3 中使用 glfwSetWindowUserPointer?

java - 在 libgdx UI 中设置复选框图像的大小

java - 同步方法重写 - 线程获取哪个对象的锁?

python - Flask-SocketIO eventlet 无法切换到不同的线程

php - 在 php 中运行异步函数

rust - 如何在 bevy 游戏引擎中为我的 3D 体素游戏绘制多个(10000)个立方体?