我正在制作一个多人游戏,玩家在车辆中战斗,我怀疑我的服务器架构。由于这将是物理,网络和人工智能密集,我想把这三个主题分成自己的线程。也许每一个AI甚至有一个线程。
物理线程将运行在一个固定的时间步骤,并做同样的循环一遍又一遍。
struct
应用于单个车辆。AI线程将在需要的基础上计算下一个动作.
网络线程将
1. Pack the differences together and broadcast.
我如何在C++中实现这一点?x86是否为此提供了实际的中断?其他架构如何,或者是否有一些库为我做到了这一点?
还是我该换一种方法?
发布于 2021-01-07 03:44:35
std::condition_variable
将允许您wait_for
event_queue.has_event()
,您可以notify_one
来唤醒等待的线程。但是,这样做的缺点是,您依赖于调度程序来真正唤醒线程。然而,调度程序的解析可能比您预期的要大。您可以采取只读快照的游戏状态,以作出人工智能的决定。这可以使双缓冲更容易。
AI线程使用两个缓冲区:从最后一个状态读取和写入到新状态。然后,更新完成后,它将新写入的状态设置为最新状态。另外两个线程可以读取锁定最新的缓冲区来做出决定。确保您有足够的资源来为下一次写入时分配一个未使用的缓冲区。在您的情况下,您需要5个游戏状态缓冲区,2个用于网络线程,1个用于AI,2个用于更新线程。
https://gamedev.stackexchange.com/questions/188198
复制