gpt4 book ai didi

java - 确保线程在 Java 中获得(大约)相等的 CPU 时间

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:19:38 25 4
gpt4 key购买 nike

我正在编写一款游戏,玩家可以在 JVM 上编写相互竞争的 AI 代理。现在架构看起来像这样:

  1. 一个核心服务器模块,用于处理物理模拟,并将来自玩家的消息作为输入来改变世界。核心还根据各种规则(想想 war 迷雾)从每个玩家的角度决定世界的样子。
  2. 播放器模块从核心接收世界的更新版本,对其进行处理,并根据该处理将消息作为输入流式传输到核心。

这个想法是核心与两个播放器模块一起编译,然后运行模拟产生一个输出流,可以回放以生成比赛的可视化。

我的问题是,如果每个玩家都在一个 Java 线程上运行,是否可以确保两个玩家线程获得相等数量的资源(我认为主要是 CPU 时间)?因为我无法控制每个 AI 正在执行的处理的性质,所以有可能其中一个玩家可能效率极低,但其编写方式使其线程消耗如此多的资源,而另一个玩家的 AI 资源匮乏并且可以'公平竞争。

我觉得如果没有硬实时操作系统,这是不可能的,JVM 甚至还差得远,但如果有一种方法可以相当接近,我很乐意探索它。

最佳答案

“播放器模块从核心接收世界的更新版本,处理它们,并将消息流式传输到核心作为基于该处理的输入”。这意味着玩家模块内部有一个循环,它接收更新消息并将结果消息发送到核心。然后我会使用轻量级 Actor 模型,每个玩家都是 Actor ,所有 Actor 都使用相同的 ExecutorService。由于激活的 actor 通过相同的执行程序任务队列,因此它们对 CPU 的访问大致相同。

关于java - 确保线程在 Java 中获得(大约)相等的 CPU 时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14331186/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com