游戏开发的多线程问题?

Multithreading questions for game development?

我正在用 LWJGL3 编写游戏,有几个关于多线程概念的问题。

问题 1:我知道如果您不需要多线程,则不应添加多线程,因为它会增加复杂性,但您何时以及如何知道您需要它?

Q2:是在开发之初加入,还是以后需要的时候加入?

Q3:多线程时具体面临的编码挑战是什么?我正在考虑在我的游戏中分离主线程和渲染线程,但我不确定为什么多线程会使这变得更加困难。我知道你不能保证线程将花费多长时间 运行 但是如果你有 2 个线程执行逻辑而不是一个执行逻辑而另一个执行逻辑,那么这个接缝就像它只会是一个问题渲染?

Q4:使用消息队列在线程之间进行通信是否适合游戏,还是有点矫枉过正?

此外,如果您能分享任何您认为有用的好资源,那就太好了。

Q1:通常,只要某种处理需要一段时间而您不想挂起 UI,您就会使用多线程。如果您的所有代码都在主线程上,那么您的 UI 在耗时的进程开始和结束之间的时间内变得无响应。如果你需要做任何网络调用,你肯定需要把它们放在不同的线程上,Android 和 Swift 甚至不允许你在主线程上执行网络调用。

Q2:做就好了。如果你知道你将要使用它,你可以随时实现它,但事后并没有什么能阻止你使用多线程。

Q3:许多编码挑战都与数据计时和避免任何空指针有关,因为如果您尝试访问的数据尚未到达,您的应用程序可能会崩溃。完成处理程序可用于确保某些功能仅在数据到达后发生。

Q4:如果你的意思是在线程之间持续传递所有数据,那是没有必要的,你只需要在某个时间点传递你需要的数据。