我正在编写一款游戏,玩家在 JVM 上编写相互竞争的 AI 代理。现在架构看起来是这样的:
- 处理物理模拟的核心服务器模块,并从玩家那里获取消息作为输入以改变世界。核心还根据各种规则(想想战争迷雾)从每个玩家的角度确定世界的样子。
- 播放器模块从核心接收世界的更新版本,对其进行处理,并基于该处理将消息作为输入流式传输到核心。
这个想法是核心与两个播放器模块一起编译,然后运行模拟,产生一个输出流,可以回放以生成比赛的可视化。
我的问题是,如果每个玩家都在一个 Java 线程上运行,是否有可能确保两个玩家线程获得等量的资源(我认为主要是 CPU 时间)?因为我无法控制每个 AI 正在执行的处理的性质,所以其中一个玩家可能效率极低,但编写方式使其线程消耗了如此多的资源,而另一个玩家的 AI 资源匮乏并且可以不公平竞争。
我觉得如果没有硬实时操作系统,这是不可能的,JVM 甚至还没有接近,但如果有一种方法可以相当接近,我很想探索它。