gpt4 book ai didi

java - hibernate 直到系统有空闲资源?低优先级任务调度

转载 作者:行者123 更新时间:2023-12-02 09:05:31 24 4
gpt4 key购买 nike

有一个列表,我的程序需要定期检查 - 当事件的状态发生变化时,不能分配任何事件来触发。这些事物作为Robot类实例存储在数组列表中:

public class RobotManager extends Thread {
protected final List<Robot> robots = new ArrayList<>();
}

每个机器人都有 canRun 任务,如果机器人可以做某事,该任务将返回 true。这包括更新 GUI 按钮的可用性等。

我当前的计划是 hibernate 一段时间,比如 800 毫秒,然后循环遍历列表和 canRun(最终是 start())每个 Robot 在列表中。但这看起来不太好——如果有足够数量的任务,程序每 800 毫秒就会滞后系统一次。如果程序能够:

  1. 告诉操作系统以较低的精度 sleep 大约 800 毫秒,并尝试在有空闲资源的地方运行
  2. 在循环列表时执行这些不精确的 sleep ,以减少所需资源的峰值。

换句话说:在 Java 中,我可以降低 sleep 的精确度,以便在系统有空闲资源时运行吗?

最佳答案

我认为您正在寻找Thread.yield()方法。

Java 文档:

 A hint to the scheduler that the current thread is willing to yield
its current use of a processor. The scheduler is free to ignore this
hint.

Yield is a heuristic attempt to improve relative progression
between threads that would otherwise over-utilise a CPU. Its use
should be combined with detailed profiling and benchmarking to
ensure that it actually has the desired effect.

It is rarely appropriate to use this method. It may be useful
for debugging or testing purposes, where it may help to reproduce
bugs due to race conditions. It may also be useful when designing
concurrency control constructs such as the ones in the
java.util.concurrent.locks package.

通过结合使用 sleep(...)yield(),您可以找到“机器人列表处理得不够频繁”和“它正在吃东西”之间的权衡最多CPU”。您 sleep 的时间和屈服调用的次数(在机器人内和/或机器人调用之间)取决于您的机器人实际执行的操作。

关于java - hibernate 直到系统有空闲资源?低优先级任务调度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29210336/

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