gpt4 book ai didi

java - 如何让一个线程加入另一个线程但只等待 n 秒的 CPU 时间?

转载 作者:行者123 更新时间:2023-12-01 17:38:20 25 4
gpt4 key购买 nike

otherThread.join( time )似乎在等待time以真正的毫秒为单位。我想等time实际 CPU 时间,以便我可以在应用程序中获得一致的行为。

我快速浏览了 ThreadMXBean但这似乎不太符合我想要的(它告诉我线程的实际 CPU 时间,但没有提供方便的方法来等待一段时间)。围绕 sleep() 的繁忙循环可以工作,但似乎效率很低。

我还考虑过使用另一个线程并等待 Condition ,但我不确定这会如何运作。主线程会这样做:myCondition.await() ,其中另一个线程会切换 myConditionotherThread曾使用过time实际CPU时间。同样,这看起来很复杂,并且可能仍然需要控制线程有一个繁忙的循环。

编辑:我这样做是为了评分脚本。这意味着如果学生处于无限循环中,我需要有一种超时的方法,并且需要公平。我一直在使用 JUnit 对学生运行测试,但这也有同样的超时问题:如果多次运行相同的(低效)提交,它可能会获得不同的成绩,具体取决于机器上正在运行的其他作业当时(小组工作的一个真正问题)。

但这也是正常单元测试的问题 - 通过使用时钟时间而不是 CPU 时间,JUnit 会得到不一致的测试结果吗?

最佳答案

我建议一次运行一个 JVM 测试,并使用 time(有关详细信息,请参阅 man time)来确定实际使用的 CPU 时间。至于如果花费太长时间就中断它...您可能可以使用 shell 脚本来完成此任务,或者只是允许该过程运行完成并根据实际花费的时间进行基本评分。

关于java - 如何让一个线程加入另一个线程但只等待 n 秒的 CPU 时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4025409/

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