如何在多线程游戏引擎中保持我的世界数据同步?

时间:2009-04-17 20:03:19

标签: multithreading synchronization

所以我正在尝试为我想写的游戏创建一个简单的多线程游戏引擎。到目前为止,一切都没有任何问题,我甚至知道我必须采取什么步骤来完成它。

我只有一件事我不知道(从技术上讲,我知道它的解决方案,但我希望有更优雅和更快的东西):基本上,我有一个单独的线程,每个部分我的引擎 - 图形,输入,物理,音频等

物理线程具有完整的世界场景节点结构,模拟一切。但是,我现在必须将这个结构放到我的图形线程中,尽可能减少开销。理想情况下,它应该只传输自上次更新以来发生变化的部分。

我有用于传输此数据的组件,只有问题是生成它。

到目前为止,我已经想到了两种不同的方法:

  • 为每次更新复制整个结构 - 非常简单,但可能是时间和内存增加(我没有大型引擎的经验 - 这是否可行?)
  • 通过使用一些标记标记场景节点来跟踪场景的哪些部分,然后仅复制更改的部分

方法一会复制大量内存,但没有太多的处理能力,方法二会做相反的事情:充足的处理能力,更少的内存复制。

在典型的游戏环境中,是否有一些通用的答案会更快?

1 个答案:

答案 0 :(得分:4)

不,没有一个公认的一般答案,它是游戏开发的当前研究领域。

我的2美分是传统的智慧 - 使用哪一个真的取决于你的具体用例 - 如果你的游戏有很多数据(即它的内存密集,就像大多数重磅炸弹的标题一样),你可能只想要传输变化。如果你的游戏不是内存密集型游戏(例如街机游戏),那么你可能会抄袭整个对象。

我建议实施两者并连接性能计时器,看看哪种方法更适合你;可以实现一个可以透明地处理这两种方法的体系结构。