java - 游戏开发的多线程问题?
问题描述
我正在用 LWJGL3 编写游戏,并且对多线程的概念有一些疑问。
Q1:我知道如果你不需要多线程,你不应该添加它,因为它增加了复杂性,但是你何时以及如何知道你需要它?
Q2:是在开发之初就添加还是以后需要的时候添加?
Q3:多线程时面临的编码挑战具体是什么?我正在考虑在我的游戏中分离主线程和渲染线程,但我不确定为什么多线程会使这变得更加困难。我知道你不能保证一个线程需要多长时间才能运行,但是如果你有 2 个线程正在执行逻辑而不是一个执行逻辑而另一个执行渲染,这将是一个问题?
Q4:使用消息队列在线程之间进行通信是否适合游戏,或者这是否有点矫枉过正?
如果你能分享任何你认为有帮助的好资源,那就太好了。
解决方案
Q1:通常,当某种处理需要一段时间而您不想挂起 UI 时,您会使用多线程。如果您的所有代码都在主线程上,那么您的 UI 在耗时的过程开始和结束之间的时间内变得无响应。如果您需要进行任何网络调用,您肯定需要将它们放在不同的线程上,Android 和 Swift 甚至不允许您在主线程上执行网络调用。
Q2:只要你做,没关系。如果您知道要使用它,您可以随时实现它,但事后没有太多阻止您使用多线程。
Q3:许多编码挑战与计时数据和避免任何空指针有关,因为如果您尝试访问的数据尚未到达,您的应用程序可能会崩溃。完成处理程序有助于确保某些功能仅在数据到达后发生。
Q4:如果你的意思是在线程之间持续传递所有数据,这有点不必要,你只需要在某个时间点传递你需要的数据。
推荐阅读
- jenkins - Jenkins Build 失败了。映像已创建,但 Pod 未启动
- android - 为什么 Android drawable 不显示为列表项背景?
- c# - Microsoft DI:如果两个不同的类在其构造函数参数中采用相同的类型,我如何从配置中为它们注入不同的值?
- ruby-on-rails - 设计模型无法保存到数据库中
- sql - 关键字“ELSE”不断导致语法错误
- c# - 在没有“Thread.Abort()”的情况下立即停止 C# 线程
- json - 如何使用 VBA 代码获取将 JSON 文件读入 Excel 的代码?
- excel - 带格式的文本连接
- c# - 在字段上显示来自 AJAX 调用的验证错误
- mysql - SELECTING * 从一个表中,但只取最高值的一行