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

Mon*_*ofu 5 multithreading synchronization

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

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

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

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

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

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

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

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

Not*_*ure 4

不,没有公认的通用答案,这是游戏开发当前的研究领域。

我的 2 美分是传统智慧 - 使用哪一种实际上取决于您的具体用例 - 如果您的游戏有大量数据(即它非常占用内存,就像大多数大片游戏一样),您可能只想传输更改。如果您的游戏不是内存密集型游戏(例如街机游戏),您可能可以复制整个对象。

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