Jvm 控制执行速度

Jvm 控制执行速度,jvm,interpreter,bytecode,Jvm,Interpreter,Bytecode,我正在考虑制作一个编程游戏,即每个玩家编写一个程序来控制他们的机器人,然后这些程序相互竞争,根据某种赢的定义来确定谁赢 为了公平起见,每个bot程序都应该以相同的速度执行,因此使用本机预编译的C/C++代码似乎是不可能的 我可以想到3个选项,但不确定2个: 使用在虚拟机中运行的语言——这意味着机器人是用Java编写的,并编译成JVM字节码。然后每个bot都会得到一个JVM,我需要控制JVM时钟或其他任何东西来控制执行速度。 问题:JVM时钟是否可以控制,告诉它运行X个时钟周期的代码? 使用脚本语

我正在考虑制作一个编程游戏,即每个玩家编写一个程序来控制他们的机器人,然后这些程序相互竞争,根据某种赢的定义来确定谁赢

为了公平起见,每个bot程序都应该以相同的速度执行,因此使用本机预编译的C/C++代码似乎是不可能的

我可以想到3个选项,但不确定2个:

使用在虚拟机中运行的语言——这意味着机器人是用Java编写的,并编译成JVM字节码。然后每个bot都会得到一个JVM,我需要控制JVM时钟或其他任何东西来控制执行速度。 问题:JVM时钟是否可以控制,告诉它运行X个时钟周期的代码? 使用脚本语言-机器人程序可以用JS或Python或其他语言编写。 问题:同上-速度可以控制吗? 使用我自己的简化语言- 问题:我写的是游戏,不是编译器。这将意味着任何玩游戏的人都必须学习另一种语言,这意味着没有人会玩。
因此,基本上,我想问题是我能控制JVM或某种语言解释器的执行速度吗?这不是理论上的——实际上的?或者还有其他我没有想到的选择吗?

JVM不是实时的,我怀疑你的操作系统也不是。依赖JVM和/或进程交互是行不通的,因为你要受操作系统调度、JVM线程调度等的支配


如果您想协调多个线程,那么您应该查看JVM线程模型,特别是如何使用来协调两个线程。

一个选项是编写自己的JVM,您可以使用它从每个程序中运行固定数量的字节码指令。字节码比人类可读的源代码更容易消化,因此您只需要相对较少的实现工作,而您的用户可以使用任何能够生成Java字节码的编程语言进行编程

如果设置一些限制,比如没有线程和try/catch,那么就更容易了。您需要从java.lang.*中实现一些核心语言功能,以及一些特定于域的I/O功能,但是对于JRE的其余大部分功能,例如java.util.*如果您分发游戏引擎,您应该能够从现有JRE实现中执行字节码,而不受法律约束

与在现成的优化JVM上运行相比,根据您的实现技术,预计速度会降低10到100倍


或者,在调试模式下运行现有JVM,单步完成游戏中的参赛者程序。我不确定这比自己编写一个简单的JVM容易还是难。

这就是为什么我说每个机器人都有自己的JVM。如果可能的话,我可以告诉每个JVM依次执行,比如说,100条指令,它们会根据操作系统的调度以自己的速度执行,但是当每个调用返回时,每个JVM都执行了100条指令,现在暂停,模拟一个恒定的运行环境。