当前位置:  开发笔记 > 编程语言 > 正文

用Java限制线程执行处理器周期

如何解决《用Java限制线程执行处理器周期》经验,为你挑选了1个好方法。

我正在为竞赛编写AI测试框架.参与者提交与给定界面匹配的Bot类.然后所有的机器人都玩转弯游戏.在每一个转弯,我想做以下事情:

For every bot B:
    start a thread that runs at most N cycles and does B.getNextMove()
wait for all threads to complete
Make all moves (from each bot).

我的困难在于"最多N次循环".我可以按时间限制所有机器人(比如每回合半秒),但这意味着有些人可以获得比其他人更多的处理器周期,并且不允许严格的"你的机器人应该能够做出决定:转向X时间"在比赛中的要求.

如上所述,这是Java.有任何想法吗?我一直在关注并发和锁定,但这并不是正确的方向.此外,有可能不在Parralel运行机器人,然后使用时间进行限制(假设计算机当时没有运行任何其他东西),但这是不可取的,因为它会显着降低我们的速度可能有游戏的结果.



1> nos..:

我与机器人建立了一个接口,让他们对他们的算法做一次迭代,然后做一个简单的计数.

如果您需要硬盘时间/ CPU限制,那么在Java中管理它的方法就不那么多(简单)了.

您无法使用java测量cpu周期,但您可以测量CPU时间 - 这比仅使用挂钟时间有了很大的改进.

获取当前线程的cpu时间(来自标准的java.lang.management包)

ThreadMXBean tm = ManagementFactory.getThreadMXBean();
long cpuTime = tm.getCurrentThreadCpuTime();

推荐阅读
喜生-Da
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有